From c71181ff515b2d2e464dcf769f391cd5eccc4d0f Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 12 Oct 2021 18:08:49 +0100 Subject: [PATCH] possible multithreading issues --- OpenSim/Framework/Monitoring/JobEngine.cs | 14 +++++++++++--- OpenSim/Framework/ObjectJobEngine.cs | 13 ++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/OpenSim/Framework/Monitoring/JobEngine.cs b/OpenSim/Framework/Monitoring/JobEngine.cs index 850e99b1a6..3f71811d36 100644 --- a/OpenSim/Framework/Monitoring/JobEngine.cs +++ b/OpenSim/Framework/Monitoring/JobEngine.cs @@ -188,10 +188,10 @@ namespace OpenSim.Framework.Monitoring if (m_jobQueue.Count < m_jobQueue.BoundedCapacity) { - m_jobQueue.Add(job); - lock (JobLock) { + m_jobQueue.Add(job); + if (m_numberThreads < m_concurrency && m_numberThreads < m_jobQueue.Count) { Util.FireAndForget(ProcessRequests, null, Name, false); @@ -225,7 +225,15 @@ namespace OpenSim.Framework.Monitoring try { if(!m_jobQueue.TryTake(out currentJob, m_timeout, m_cancelSource.Token)) - break; + { + lock (JobLock) + { + if (m_jobQueue.Count > 0) + continue; + --m_numberThreads; + return; + } + } } catch { diff --git a/OpenSim/Framework/ObjectJobEngine.cs b/OpenSim/Framework/ObjectJobEngine.cs index 1087a25a32..11027c9b34 100644 --- a/OpenSim/Framework/ObjectJobEngine.cs +++ b/OpenSim/Framework/ObjectJobEngine.cs @@ -141,10 +141,9 @@ namespace OpenSim.Framework if (!m_isRunning) return false; - m_jobQueue?.Add(o); - lock (m_mainLock) { + m_jobQueue?.Add(o); if (m_numberThreads < m_concurrency && m_numberThreads < m_jobQueue.Count) { Util.FireAndForget(ProcessRequests, null, m_name, false); @@ -162,7 +161,15 @@ namespace OpenSim.Framework try { if(!m_jobQueue.TryTake(out obj, m_threadsHoldtime, m_cancelSource.Token)) - break; + { + lock (m_mainLock) + { + if (m_jobQueue.Count > 0) + continue; + --m_numberThreads; + return; + } + } } catch {