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
1620 setEntityScriptDetails(entityID, newDetails);1620 setEntityScriptDetails(entityID, newDetails);
1621 1621
1622 auto scriptCache = DependencyManager::get<ScriptCache>();1622 auto scriptCache = DependencyManager::get<ScriptCache>();
1623 // note: see EntityTreeRenderer.cpp for shared pointer lifecycle management
1624 QWeakPointer<ScriptEngine> weakRef(sharedFromThis());
1623 scriptCache->getScriptContents(entityScript,1625 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 }
1625 if (isStopping()) {1631 if (isStopping()) {
1626#ifdef DEBUG_ENTITY_STATES1632#ifdef DEBUG_ENTITY_STATES
1627 qCDebug(scriptengine) << "loadEntityScript.contentAvailable -- stopping";1633 qCDebug(scriptengine) << "loadEntityScript.contentAvailable -- stopping";