summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2018-09-30 22:28:41 +0200
committerGitHub <noreply@github.com>2018-09-30 22:28:41 +0200
commit36e02a0fb5cdae387ea6cb8ee730687e5890c95c (patch)
tree44ec322e3f23755f5d8eed55c01a26a00bb0dc45
parentc459fad43cb5793d16c79789dc3fc1f896d1c4d5 (diff)
parenta392d553c29079d65bab6267d35ba9a9b1af5277 (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.cpp9
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);
}