diff --git a/indra/llcommon/workqueue.h b/indra/llcommon/workqueue.h
index b88aef989aedb20f8ec688bad59a81998a8f18d2..5ec790da799b1020a7ec82ec1ddf9e88d034aebd 100644
--- a/indra/llcommon/workqueue.h
+++ b/indra/llcommon/workqueue.h
@@ -94,6 +94,12 @@ namespace LL
         void postEvery(const std::chrono::duration<Rep, Period>& interval,
                        CALLABLE&& callable);
 
+        template <typename CALLABLE>
+        bool tryPost(CALLABLE&& callable)
+        {
+            return mQueue.tryPush(TimedWork(TimePoint::clock::now(), std::move(callable)));
+        }
+
         /*------------------------- handshake API --------------------------*/
 
         /**
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 09b1c71f0293484919d92916036ef9cc902360cf..cbc53928824f0daefd953039c2ce49de4d4db25b 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -2288,7 +2288,10 @@ bool LLImageGLThread::postCallback(const std::function<void()>& callback)
 {
     try
     {
-        mCallbackQueue.post(callback);
+        if (!mCallbackQueue.tryPost(callback))
+        {
+            mPendingCallbackQ.push(callback);
+        }
     }
     catch (LLThreadSafeQueueInterrupt e)
     {
@@ -2304,6 +2307,18 @@ void LLImageGLThread::executeCallbacks()
     LL_PROFILE_ZONE_SCOPED;
     //executed from main thread
     mCallbackQueue.runPending();
+
+    while (!mPendingCallbackQ.empty())
+    {
+        if (mCallbackQueue.tryPost(mPendingCallbackQ.front()))
+        {
+            mPendingCallbackQ.pop();
+        }
+        else
+        {
+            break;
+        }
+    }
 }
 
 void LLImageGLThread::run()
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index 95b60bd0bdccde99573aa00700dbc4d974c3ec65..8264e4a5f214ae0055b4c5ca304217aeffc824ce 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -332,6 +332,8 @@ class LLImageGLThread : public LLThread
     void* mContext;
     LLAtomicBool mFinished;
 
+    std::queue<std::function<void()>> mPendingCallbackQ;
+
     static LLImageGLThread* sInstance;
 };