History

Add weakRef guard to detect ScriptEngine deletion during ScriptCache::getScriptContents

humbletim committed 9 years ago

Commit 654c72f1 parent 5b11c0e2 files · +8 −2Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 2 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+7−1
@@ -1620,8 +1620,14 @@ void ScriptEngine::loadEntityScript(const EntityItemID& entityID, const QString& · 1619 unmodified lines
16201620 setEntityScriptDetails(entityID, newDetails);
16211621
16221622 auto scriptCache = DependencyManager::get<ScriptCache>();
1623+ // note: see EntityTreeRenderer.cpp for shared pointer lifecycle management
1624+ QWeakPointer<ScriptEngine> weakRef(sharedFromThis());
16231625 scriptCache->getScriptContents(entityScript,
1624− [this, entityScript, entityID](const QString& url, const QString& contents, bool isURL, bool success, const QString& status) {
1626+ [this, weakRef, entityScript, entityID](const QString& url, const QString& contents, bool isURL, bool success, const QString& status) {
1627+ if (!weakRef) {
1628+ qCWarning(scriptengine) << "loadEntityScript.contentAvailable -- ScriptEngine was deleted during getScriptContents!!";
1629+ return;
1630+ }
16251631 if (isStopping()) {
16261632 #ifdef DEBUG_ENTITY_STATES
16271633 qCDebug(scriptengine) << "loadEntityScript.contentAvailable -- stopping";