From fa26f5eaa2cb1a0152fe681e9baa292626564caf Mon Sep 17 00:00:00 2001
From: Andrey Kleshchev <andreykproductengine@lindenlab.com>
Date: Fri, 21 May 2021 19:06:11 +0300
Subject: [PATCH] SL-14988 Viewer freezes when opening any CEF based window

Don't block main thread if possible
---
 indra/llplugin/llpluginprocessparent.cpp | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index 7d18bae9470..f4bd9443879 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -320,8 +320,9 @@ void LLPluginProcessParent::idle(void)
 	do
 	{
 		// process queued messages
-		mIncomingQueueMutex.lock();
-		while(!mIncomingQueue.empty())
+        // Inside main thread, it is preferable not to block it on mutex.
+		bool locked = mIncomingQueueMutex.trylock();
+		while(locked && !mIncomingQueue.empty())
 		{
 			LLPluginMessage message = mIncomingQueue.front();
 			mIncomingQueue.pop();
@@ -329,10 +330,13 @@ void LLPluginProcessParent::idle(void)
 				
 			receiveMessage(message);
 			
-			mIncomingQueueMutex.lock();
+			locked = mIncomingQueueMutex.trylock();
 		}
 
-		mIncomingQueueMutex.unlock();
+        if (locked)
+        {
+            mIncomingQueueMutex.unlock();
+        }
 		
 		// Give time to network processing
 		if(mMessagePipe)
-- 
GitLab