mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
fix a couple shutdown crashes and a class of asan warning
This commit is contained in:
parent
6cd5770505
commit
6589db628a
5 changed files with 39 additions and 25 deletions
|
@ -43,7 +43,7 @@ bool MenuScriptingInterface::menuExists(const QString& menu) {
|
|||
if (QThread::currentThread() == qApp->thread()) {
|
||||
return Menu::getInstance()->menuExists(menu);
|
||||
}
|
||||
bool result;
|
||||
bool result { false };
|
||||
BLOCKING_INVOKE_METHOD(Menu::getInstance(), "menuExists",
|
||||
Q_RETURN_ARG(bool, result),
|
||||
Q_ARG(const QString&, menu));
|
||||
|
@ -86,7 +86,7 @@ bool MenuScriptingInterface::menuItemExists(const QString& menu, const QString&
|
|||
if (QThread::currentThread() == qApp->thread()) {
|
||||
return Menu::getInstance()->menuItemExists(menu, menuitem);
|
||||
}
|
||||
bool result;
|
||||
bool result { false };
|
||||
BLOCKING_INVOKE_METHOD(Menu::getInstance(), "menuItemExists",
|
||||
Q_RETURN_ARG(bool, result),
|
||||
Q_ARG(const QString&, menu),
|
||||
|
@ -98,7 +98,7 @@ bool MenuScriptingInterface::isOptionChecked(const QString& menuOption) {
|
|||
if (QThread::currentThread() == qApp->thread()) {
|
||||
return Menu::getInstance()->isOptionChecked(menuOption);
|
||||
}
|
||||
bool result;
|
||||
bool result { false };
|
||||
BLOCKING_INVOKE_METHOD(Menu::getInstance(), "isOptionChecked",
|
||||
Q_RETURN_ARG(bool, result),
|
||||
Q_ARG(const QString&, menuOption));
|
||||
|
@ -115,7 +115,7 @@ bool MenuScriptingInterface::isMenuEnabled(const QString& menuOption) {
|
|||
if (QThread::currentThread() == qApp->thread()) {
|
||||
return Menu::getInstance()->isOptionChecked(menuOption);
|
||||
}
|
||||
bool result;
|
||||
bool result { false };
|
||||
BLOCKING_INVOKE_METHOD(Menu::getInstance(), "isMenuEnabled",
|
||||
Q_RETURN_ARG(bool, result),
|
||||
Q_ARG(const QString&, menuOption));
|
||||
|
|
|
@ -40,15 +40,6 @@
|
|||
|
||||
static Setting::Handle<quint16> LIMITED_NODELIST_LOCAL_PORT("LimitedNodeList.LocalPort", 0);
|
||||
|
||||
const std::set<NodeType_t> SOLO_NODE_TYPES = {
|
||||
NodeType::AvatarMixer,
|
||||
NodeType::AudioMixer,
|
||||
NodeType::AssetServer,
|
||||
NodeType::EntityServer,
|
||||
NodeType::MessagesMixer,
|
||||
NodeType::EntityScriptServer
|
||||
};
|
||||
|
||||
LimitedNodeList::LimitedNodeList(int socketListenPort, int dtlsListenPort) :
|
||||
_nodeSocket(this),
|
||||
_packetReceiver(new PacketReceiver(this))
|
||||
|
|
|
@ -444,6 +444,15 @@ private:
|
|||
int _outboundPPS { 0 };
|
||||
float _inboundKbps { 0.0f };
|
||||
float _outboundKbps { 0.0f };
|
||||
|
||||
const std::set<NodeType_t> SOLO_NODE_TYPES = {
|
||||
NodeType::AvatarMixer,
|
||||
NodeType::AudioMixer,
|
||||
NodeType::AssetServer,
|
||||
NodeType::EntityServer,
|
||||
NodeType::MessagesMixer,
|
||||
NodeType::EntityScriptServer
|
||||
};
|
||||
};
|
||||
|
||||
#endif // hifi_LimitedNodeList_h
|
||||
|
|
|
@ -164,7 +164,9 @@ ScriptEnginePointer scriptEngineFactory(ScriptEngine::Context context,
|
|||
const QString& fileNameString) {
|
||||
ScriptEngine* engine = new ScriptEngine(context, scriptContents, fileNameString);
|
||||
ScriptEnginePointer engineSP = ScriptEnginePointer(engine);
|
||||
DependencyManager::get<ScriptEngines>()->addScriptEngine(qSharedPointerCast<ScriptEngine>(engineSP));
|
||||
auto scriptEngines = DependencyManager::get<ScriptEngines>();
|
||||
scriptEngines->addScriptEngine(qSharedPointerCast<ScriptEngine>(engineSP));
|
||||
engine->setScriptEngines(scriptEngines);
|
||||
return engineSP;
|
||||
}
|
||||
|
||||
|
@ -259,7 +261,7 @@ bool ScriptEngine::isDebugMode() const {
|
|||
}
|
||||
|
||||
ScriptEngine::~ScriptEngine() {
|
||||
auto scriptEngines = DependencyManager::get<ScriptEngines>();
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (scriptEngines) {
|
||||
scriptEngines->removeScriptEngine(qSharedPointerCast<ScriptEngine>(sharedFromThis()));
|
||||
}
|
||||
|
@ -1012,7 +1014,8 @@ QScriptValue ScriptEngine::evaluateInClosure(const QScriptValue& closure, const
|
|||
}
|
||||
|
||||
QScriptValue ScriptEngine::evaluate(const QString& sourceCode, const QString& fileName, int lineNumber) {
|
||||
if (DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (!scriptEngines || scriptEngines->isStopped()) {
|
||||
return QScriptValue(); // bail early
|
||||
}
|
||||
|
||||
|
@ -1062,7 +1065,8 @@ void ScriptEngine::run() {
|
|||
auto name = filenameParts.size() > 0 ? filenameParts[filenameParts.size() - 1] : "unknown";
|
||||
PROFILE_SET_THREAD_NAME("Script: " + name);
|
||||
|
||||
if (DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (!scriptEngines || scriptEngines->isStopped()) {
|
||||
return; // bail early - avoid setting state in init(), as evaluate() will bail too
|
||||
}
|
||||
|
||||
|
@ -1319,7 +1323,7 @@ void ScriptEngine::updateMemoryCost(const qint64& deltaSize) {
|
|||
|
||||
void ScriptEngine::timerFired() {
|
||||
{
|
||||
auto engine = DependencyManager::get<ScriptEngines>();
|
||||
QSharedPointer<ScriptEngines> engine(_scriptEngines);
|
||||
if (!engine || engine->isStopped()) {
|
||||
scriptWarningMessage("Script.timerFired() while shutting down is ignored... parent script:" + getFilename());
|
||||
return; // bail early
|
||||
|
@ -1373,7 +1377,8 @@ QObject* ScriptEngine::setupTimerWithInterval(const QScriptValue& function, int
|
|||
}
|
||||
|
||||
QObject* ScriptEngine::setInterval(const QScriptValue& function, int intervalMS) {
|
||||
if (DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (!scriptEngines || scriptEngines->isStopped()) {
|
||||
scriptWarningMessage("Script.setInterval() while shutting down is ignored... parent script:" + getFilename());
|
||||
return NULL; // bail early
|
||||
}
|
||||
|
@ -1382,7 +1387,8 @@ QObject* ScriptEngine::setInterval(const QScriptValue& function, int intervalMS)
|
|||
}
|
||||
|
||||
QObject* ScriptEngine::setTimeout(const QScriptValue& function, int timeoutMS) {
|
||||
if (DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (!scriptEngines || scriptEngines->isStopped()) {
|
||||
scriptWarningMessage("Script.setTimeout() while shutting down is ignored... parent script:" + getFilename());
|
||||
return NULL; // bail early
|
||||
}
|
||||
|
@ -1813,7 +1819,8 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac
|
|||
if (!IS_THREADSAFE_INVOCATION(thread(), __FUNCTION__)) {
|
||||
return;
|
||||
}
|
||||
if (DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (!scriptEngines || scriptEngines->isStopped()) {
|
||||
scriptWarningMessage("Script.include() while shutting down is ignored... includeFiles:"
|
||||
+ includeFiles.join(",") + "parent script:" + getFilename());
|
||||
return; // bail early
|
||||
|
@ -1907,7 +1914,8 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac
|
|||
}
|
||||
|
||||
void ScriptEngine::include(const QString& includeFile, QScriptValue callback) {
|
||||
if (DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (!scriptEngines || scriptEngines->isStopped()) {
|
||||
scriptWarningMessage("Script.include() while shutting down is ignored... includeFile:"
|
||||
+ includeFile + "parent script:" + getFilename());
|
||||
return; // bail early
|
||||
|
@ -1925,7 +1933,8 @@ void ScriptEngine::load(const QString& loadFile) {
|
|||
if (!IS_THREADSAFE_INVOCATION(thread(), __FUNCTION__)) {
|
||||
return;
|
||||
}
|
||||
if (DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (!scriptEngines || scriptEngines->isStopped()) {
|
||||
scriptWarningMessage("Script.load() while shutting down is ignored... loadFile:"
|
||||
+ loadFile + "parent script:" + getFilename());
|
||||
return; // bail early
|
||||
|
@ -2073,10 +2082,11 @@ void ScriptEngine::loadEntityScript(const EntityItemID& entityID, const QString&
|
|||
}
|
||||
PROFILE_RANGE(script, __FUNCTION__);
|
||||
|
||||
if (isStopping() || DependencyManager::get<ScriptEngines>()->isStopped()) {
|
||||
QSharedPointer<ScriptEngines> scriptEngines(_scriptEngines);
|
||||
if (isStopping() || !scriptEngines || scriptEngines->isStopped()) {
|
||||
qCDebug(scriptengine) << "loadEntityScript.start " << entityID.toString()
|
||||
<< " but isStopping==" << isStopping()
|
||||
<< " || engines->isStopped==" << DependencyManager::get<ScriptEngines>()->isStopped();
|
||||
<< " || engines->isStopped==" << scriptEngines->isStopped();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -563,6 +563,8 @@ public:
|
|||
bool getEntityScriptDetails(const EntityItemID& entityID, EntityScriptDetails &details) const;
|
||||
bool hasEntityScriptDetails(const EntityItemID& entityID) const;
|
||||
|
||||
void setScriptEngines(QSharedPointer<ScriptEngines>& scriptEngines) { _scriptEngines = scriptEngines; }
|
||||
|
||||
public slots:
|
||||
|
||||
/**jsdoc
|
||||
|
@ -814,6 +816,8 @@ protected:
|
|||
static const QString _SETTINGS_ENABLE_EXTENDED_EXCEPTIONS;
|
||||
|
||||
Setting::Handle<bool> _enableExtendedJSExceptions { _SETTINGS_ENABLE_EXTENDED_EXCEPTIONS, true };
|
||||
|
||||
QWeakPointer<ScriptEngines> _scriptEngines;
|
||||
};
|
||||
|
||||
ScriptEnginePointer scriptEngineFactory(ScriptEngine::Context context,
|
||||
|
|
Loading…
Reference in a new issue