فهرست منبع

Fixed a crash in core object sync which happened when an object that was another object's dependency was deleted

BearishSun 10 سال پیش
والد
کامیت
908f51e4e6
1فایلهای تغییر یافته به همراه28 افزوده شده و 0 حذف شده
  1. 28 0
      BansheeCore/Source/BsCoreObjectManager.cpp

+ 28 - 0
BansheeCore/Source/BsCoreObjectManager.cpp

@@ -79,6 +79,34 @@ namespace BansheeEngine
 		}
 
 		updateDependencies(object, nullptr);
+
+		// Clear dependencies from dependants
+		{
+			BS_LOCK_MUTEX(mObjectsMutex);
+
+			auto iterFind = mDependants.find(internalId);
+			if (iterFind != mDependants.end())
+			{
+				Vector<CoreObject*>& dependants = iterFind->second;
+				for (auto& entry : dependants)
+				{
+					auto iterFind2 = mDependencies.find(entry->getInternalID());
+					if (iterFind2 != mDependencies.end())
+					{
+						Vector<CoreObject*>& dependencies = iterFind2->second;
+						auto iterFind3 = std::find(dependencies.begin(), dependencies.end(), object);
+
+						if (iterFind3 != dependencies.end())
+							dependencies.erase(iterFind3);
+
+						if (dependencies.size() == 0)
+							mDependencies.erase(iterFind2);
+					}
+				}
+
+				mDependants.erase(iterFind);
+			}
+		}
 	}
 
 	void CoreObjectManager::notifyCoreDirty(CoreObject* object)