diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2018-09-30 22:28:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-30 22:28:41 +0200 |
commit | 36e02a0fb5cdae387ea6cb8ee730687e5890c95c (patch) | |
tree | 44ec322e3f23755f5d8eed55c01a26a00bb0dc45 | |
parent | c459fad43cb5793d16c79789dc3fc1f896d1c4d5 (diff) | |
parent | a392d553c29079d65bab6267d35ba9a9b1af5277 (diff) |
Merge pull request #22537 from Zylann/fix_objectid_leak_thread
Fix dirty read of ObjectID counter when threads are involved
-rw-r--r-- | core/object.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/core/object.cpp b/core/object.cpp index 86d9fbde20..345c018e6d 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -2014,11 +2014,13 @@ ObjectID ObjectDB::add_instance(Object *p_object) { ERR_FAIL_COND_V(p_object->get_instance_id() != 0, 0); rw_lock->write_lock(); - instances[++instance_counter] = p_object; - instance_checks[p_object] = instance_counter; + ObjectID instance_id = ++instance_counter; + instances[instance_id] = p_object; + instance_checks[p_object] = instance_id; + rw_lock->write_unlock(); - return instance_counter; + return instance_id; } void ObjectDB::remove_instance(Object *p_object) { @@ -2095,6 +2097,5 @@ void ObjectDB::cleanup() { instances.clear(); instance_checks.clear(); rw_lock->write_unlock(); - memdelete(rw_lock); } |