From 0d5138c1f93a77ff52551a76d0d8575413550859 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> Date: Tue, 21 Oct 2025 20:34:23 +0300 Subject: #4839 Crash at LLPluginProcessParent::poll Missed lock --- indra/llplugin/llpluginprocessparent.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra/llplugin/llpluginprocessparent.cpp') diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index afee099697..02c7d9507d 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -983,6 +983,7 @@ void LLPluginProcessParent::poll(F64 timeout) } // Remove instances in the done state from the sInstances map. + LLCoros::LockType lock(*sInstancesMutex); mapInstances_t::iterator itClean = sInstances.begin(); while (itClean != sInstances.end()) { -- cgit v1.2.3 From f7516a463114e3982b7d4cbd86645fc4369ffce9 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> Date: Fri, 31 Oct 2025 18:47:01 +0200 Subject: #4918 Crash at LLPluginProcessParent::poll Bugsplat shows that mutex is null. It's possible that no instances exist thus mutex wasn't initialized. --- indra/llplugin/llpluginprocessparent.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'indra/llplugin/llpluginprocessparent.cpp') diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 02c7d9507d..4f55d75e7d 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -982,15 +982,18 @@ void LLPluginProcessParent::poll(F64 timeout) } } - // Remove instances in the done state from the sInstances map. - LLCoros::LockType lock(*sInstancesMutex); - mapInstances_t::iterator itClean = sInstances.begin(); - while (itClean != sInstances.end()) + if (sInstancesMutex) { - if ((*itClean).second->isDone()) - itClean = sInstances.erase(itClean); - else - ++itClean; + // Remove instances in the done state from the sInstances map. + LLCoros::LockType lock(*sInstancesMutex); + mapInstances_t::iterator itClean = sInstances.begin(); + while (itClean != sInstances.end()) + { + if ((*itClean).second->isDone()) + itClean = sInstances.erase(itClean); + else + ++itClean; + } } } -- cgit v1.2.3