title: OmniThreadLibrary - Code: 1816. Not enough quota is available to process this command
body: <p><strong>Update 1</strong>: I included the stack traces of all threads instead of just the main thread's - I thought it was enough already.</p>
  
  <p><strong>Update 2</strong>: I reopened this question, since even after applied the changes illustrated in my own question, I still get the very same error report today...</p>
  
  <p><strong>Update 3</strong>: It seems that the error happened when the thread is terminating and the thread message that's being sent when the error happened was <code>COmniTaskMsg_Terminated</code>. Now it's very strange - I've replaced almost all calls to <code>Task.Comm.Send()</code> in my program with a thread-safe queue, so I'm quite sure the number of thread messages go through <code>Task.Comm</code> is a very small, far less than that might fill up the Windows message queue...</p>
  
  <hr>
  
  <p>I use OmniThreadLibrary-3.03a (just upgraded to the latest svn, I'll see...) with Delphi XE4, and get an error reported from the end user, the error message and stack trace of the thread that had this problem are included at the end.</p>
  
  <p>Actually I've reduced the possibility of this error, by replacing the calls to <code>Task.Comm.Send()</code> with a thread-safe queue which is used by the background threads to send logs to the main thread. Now I don't know where to look at, the most possible place is here (but within this code block no <code>Task.Comm.Send()</code> calls...):</p>
  
  <pre><code>  //at this point, we are already in a thread other than the main thread.
    //I've two instances of the very same thread running when the program runs.
    myTasks := Parallel.ParallelTask.NumTasks(aTaskCount);// aTaskCount = 5
  
    myTasks.Execute(
      //the following anonymous method will be executed in sub-threads and will have
      //multiple instances determined by the aTaskCount param.
      procedure (const aSubTask: IOmniTask)
      begin
        //note: this code block runs in multiple sub-threads in parallel.
        //aUidList can have tens of thousands (or even more) of item.
        while aUidList.Take(uid) and (not Self.task.CancellationToken.IsSignalled) do
        begin
          ThreadedDoSomething();
        end;
      end
    );//END sub-thread
  </code></pre>
  
  <p>Stacktrace: </p>
  
  <pre><code>process id         : $2f9c
  allocated memory   : 181.30 MB
  largest free block : 1019.73 MB
  executable         : MyProgram.exe
  exec. date/time    : 2014-08-02 21:12
  version            : 1.0.7.256
  compiled with      : Delphi XE4
  madExcept version  : 4.0.9
  callstack crc      : $8b5fc164, $b1225a03, $7caf0d48
  exception number   : 1
  exception class    : EOSError
  exception message  : System Error. Code: 1816. Not enough quota is available to process this command.
  
  thread $1160 (TOmniThread): &lt;priority:-15&gt;
  0045c3de MyProgram.exe System.SysUtils           RaiseLastOSError
  0045c35b MyProgram.exe System.SysUtils           RaiseLastOSError
  0045c40f MyProgram.exe System.SysUtils           Win32Check
  0075b387 MyProgram.exe OtlContainerObserver  252 TOmniContainerWindowsMessageObserverImpl.Send
  0076debb MyProgram.exe OtlTaskControl       1378 TOmniTask.InternalExecute
  0076db6a MyProgram.exe OtlTaskControl       1274 TOmniTask.Execute
  0077423c MyProgram.exe OtlTaskControl       3091 TOmniThread.Execute
  004ab243 MyProgram.exe madExcept                 HookedTThreadExecute
  0053c596 MyProgram.exe System.Classes            ThreadProc
  0040a5b4 MyProgram.exe System                150 ThreadWrapper
  004ab129 MyProgram.exe madExcept                 CallThreadProcSafe
  004ab18e MyProgram.exe madExcept                 ThreadExceptFrame
  75223368 kernel32.dll                            BaseThreadInitThunk
  &gt;&gt; created by main thread ($1408) at:
  007741a1 MyProgram.exe OtlTaskControl       3080 TOmniThread.Create
  
  main thread ($1408):
  0090f52d MyProgram.exe VirtualTrees       33601 TBaseVirtualTree.SortTree
  00906fd1 MyProgram.exe VirtualTrees       28348 TBaseVirtualTree.EndUpdate
  008f3563 MyProgram.exe VirtualTrees       17031 TBaseVirtualTree.SetRootNodeCount
  00b66d99 MyProgram.exe BackupControlFrame   219 TfraBackupControl.AddLog
  00b66be2 MyProgram.exe BackupControlFrame   179 TfraBackupControl.AddLog
  00b69595 MyProgram.exe BackupControlFrame   844 TfraBackupControl.TimerReadLogTimer
  005f430b MyProgram.exe Vcl.ExtCtrls             TTimer.Timer
  005f41ef MyProgram.exe Vcl.ExtCtrls             TTimer.WndProc
  0053fca4 MyProgram.exe System.Classes           StdWndProc
  76777885 USER32.dll                             DispatchMessageW
  00656b87 MyProgram.exe Vcl.Forms                TApplication.ProcessMessage
  00656bca MyProgram.exe Vcl.Forms                TApplication.HandleMessage
  00656f05 MyProgram.exe Vcl.Forms                TApplication.Run
  00b83f34 MyProgram.exe MyProgram            130 initialization
  75223368 kernel32.dll                           BaseThreadInitThunk
  
  thread $22a4:
  771d0156 ntdll.dll     NtWaitForMultipleObjects
  75223368 kernel32.dll  BaseThreadInitThunk
  
  thread $1604:
  771d0156 ntdll.dll                NtWaitForMultipleObjects
  761215e3 KERNELBASE.dll           WaitForMultipleObjectsEx
  752219f7 kernel32.dll             WaitForMultipleObjectsEx
  76780864 USER32.dll               MsgWaitForMultipleObjectsEx
  76780b64 USER32.dll               MsgWaitForMultipleObjects
  004ab129 MyProgram.exe  madExcept CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept ThreadExceptFrame
  75223368 kernel32.dll             BaseThreadInitThunk
  &gt;&gt; created by main thread ($1408) at:
  738778e1 gdiplus.dll
  
  thread $3060 (TWorkerThread):
  771cf8ca ntdll.dll                          NtWaitForSingleObject
  76121497 KERNELBASE.dll                     WaitForSingleObjectEx
  7522118f kernel32.dll                       WaitForSingleObjectEx
  75221143 kernel32.dll                       WaitForSingleObject
  008e2dbe MyProgram.exe  VirtualTrees   6364 TWorkerThread.Execute
  004ab243 MyProgram.exe  madExcept           HookedTThreadExecute
  0053c596 MyProgram.exe  System.Classes      ThreadProc
  0040a5b4 MyProgram.exe  System          150 ThreadWrapper
  004ab129 MyProgram.exe  madExcept           CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept           ThreadExceptFrame
  75223368 kernel32.dll                       BaseThreadInitThunk
  &gt;&gt; created by main thread ($1408) at:
  008e2cda MyProgram.exe  VirtualTrees   6312 TWorkerThread.Create
  
  thread $22c0:
  771d1f3f ntdll.dll     NtWaitForWorkViaWorkerFactory
  75223368 kernel32.dll  BaseThreadInitThunk
  
  thread $33d0:
  771cf8ca ntdll.dll                NtWaitForSingleObject
  76121497 KERNELBASE.dll           WaitForSingleObjectEx
  7522118f kernel32.dll             WaitForSingleObjectEx
  004ab129 MyProgram.exe  madExcept CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept ThreadExceptFrame
  75223368 kernel32.dll             BaseThreadInitThunk
  &gt;&gt; created by thread $31fc at:
  7327325b rasman.dll
  
  thread $2dc4:
  771cf8ca ntdll.dll               NtWaitForSingleObject
  764b2f7b WS2_32.dll              WahReferenceContextByHandle
  764b6a25 WS2_32.dll              select
  004ab129 MyProgram.exe madExcept CallThreadProcSafe
  004ab18e MyProgram.exe madExcept ThreadExceptFrame
  75223368 kernel32.dll            BaseThreadInitThunk
  &gt;&gt; created by main thread ($1408) at:
  75349791 WININET.dll
  
  thread $2148:
  771d1f3f ntdll.dll     NtWaitForWorkViaWorkerFactory
  75223368 kernel32.dll  BaseThreadInitThunk
  
  thread $2258 (TOmniThread): &lt;priority:-15&gt;
  771d0156 ntdll.dll                          NtWaitForMultipleObjects
  761215e3 KERNELBASE.dll                     WaitForMultipleObjectsEx
  752219f7 kernel32.dll                       WaitForMultipleObjectsEx
  76780864 USER32.dll                         MsgWaitForMultipleObjectsEx
  00771942 MyProgram.exe  OtlTaskControl 2379 TOmniTaskExecutor.WaitForEvent
  00770ddc MyProgram.exe  OtlTaskControl 2148 TOmniTaskExecutor.MainMessageLoop
  0076fb2e MyProgram.exe  OtlTaskControl 1849 TOmniTaskExecutor.DispatchMessages
  0076e7d9 MyProgram.exe  OtlTaskControl 1636 TOmniTaskExecutor.Asy_Execute
  0076dd59 MyProgram.exe  OtlTaskControl 1354 TOmniTask.InternalExecute
  0076db6a MyProgram.exe  OtlTaskControl 1274 TOmniTask.Execute
  0077423c MyProgram.exe  OtlTaskControl 3091 TOmniThread.Execute
  0040a5b4 MyProgram.exe  System          150 ThreadWrapper
  004ab129 MyProgram.exe  madExcept           CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept           ThreadExceptFrame
  75223368 kernel32.dll                       BaseThreadInitThunk
  &gt;&gt; created by thread $1160 (TOmniThread) at:
  007741a1 MyProgram.exe  OtlTaskControl 3080 TOmniThread.Create
  
  thread $618 (TOTPWorkerThread): &lt;priority:-15&gt;
  771d0156 ntdll.dll                          NtWaitForMultipleObjects
  761215e3 KERNELBASE.dll                     WaitForMultipleObjectsEx
  752219f7 kernel32.dll                       WaitForMultipleObjectsEx
  752241d3 kernel32.dll                       WaitForMultipleObjects
  0074b749 MyProgram.exe  DSiWin32       1949 DSiWaitForTwoObjects
  007782ca MyProgram.exe  OtlComm         478 TOmniCommunicationEndpoint.ReceiveWait
  007639cc MyProgram.exe  OtlThreadPool   625 TOTPWorkerThread.Execute
  004ab243 MyProgram.exe  madExcept           HookedTThreadExecute
  0053c596 MyProgram.exe  System.Classes      ThreadProc
  0040a5b4 MyProgram.exe  System          150 ThreadWrapper
  004ab129 MyProgram.exe  madExcept           CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept           ThreadExceptFrame
  75223368 kernel32.dll                       BaseThreadInitThunk
  &gt;&gt; created by thread $2258 (TOmniThread) at:
  0076348c MyProgram.exe  OtlThreadPool   537 TOTPWorkerThread.Create
  
  thread $5f0 (TOTPWorkerThread): &lt;priority:-15&gt;
  771d0156 ntdll.dll                          NtWaitForMultipleObjects
  761215e3 KERNELBASE.dll                     WaitForMultipleObjectsEx
  752219f7 kernel32.dll                       WaitForMultipleObjectsEx
  752241d3 kernel32.dll                       WaitForMultipleObjects
  0074b749 MyProgram.exe  DSiWin32       1949 DSiWaitForTwoObjects
  007782ca MyProgram.exe  OtlComm         478 TOmniCommunicationEndpoint.ReceiveWait
  007639cc MyProgram.exe  OtlThreadPool   625 TOTPWorkerThread.Execute
  004ab243 MyProgram.exe  madExcept           HookedTThreadExecute
  0053c596 MyProgram.exe  System.Classes      ThreadProc
  0040a5b4 MyProgram.exe  System          150 ThreadWrapper
  004ab129 MyProgram.exe  madExcept           CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept           ThreadExceptFrame
  75223368 kernel32.dll                       BaseThreadInitThunk
  &gt;&gt; created by thread $2258 (TOmniThread) at:
  0076348c MyProgram.exe  OtlThreadPool   537 TOTPWorkerThread.Create
  
  thread $2a84 (TOTPWorkerThread): &lt;priority:-15&gt;
  771d0156 ntdll.dll                          NtWaitForMultipleObjects
  761215e3 KERNELBASE.dll                     WaitForMultipleObjectsEx
  752219f7 kernel32.dll                       WaitForMultipleObjectsEx
  752241d3 kernel32.dll                       WaitForMultipleObjects
  0074b749 MyProgram.exe  DSiWin32       1949 DSiWaitForTwoObjects
  007782ca MyProgram.exe  OtlComm         478 TOmniCommunicationEndpoint.ReceiveWait
  007639cc MyProgram.exe  OtlThreadPool   625 TOTPWorkerThread.Execute
  004ab243 MyProgram.exe  madExcept           HookedTThreadExecute
  0053c596 MyProgram.exe  System.Classes      ThreadProc
  0040a5b4 MyProgram.exe  System          150 ThreadWrapper
  004ab129 MyProgram.exe  madExcept           CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept           ThreadExceptFrame
  75223368 kernel32.dll                       BaseThreadInitThunk
  &gt;&gt; created by thread $2258 (TOmniThread) at:
  0076348c MyProgram.exe  OtlThreadPool   537 TOTPWorkerThread.Create
  
  thread $1ca0 (TOTPWorkerThread): &lt;priority:-15&gt;
  771d0156 ntdll.dll                          NtWaitForMultipleObjects
  761215e3 KERNELBASE.dll                     WaitForMultipleObjectsEx
  752219f7 kernel32.dll                       WaitForMultipleObjectsEx
  752241d3 kernel32.dll                       WaitForMultipleObjects
  0074b749 MyProgram.exe  DSiWin32       1949 DSiWaitForTwoObjects
  007782ca MyProgram.exe  OtlComm         478 TOmniCommunicationEndpoint.ReceiveWait
  007639cc MyProgram.exe  OtlThreadPool   625 TOTPWorkerThread.Execute
  004ab243 MyProgram.exe  madExcept           HookedTThreadExecute
  0053c596 MyProgram.exe  System.Classes      ThreadProc
  0040a5b4 MyProgram.exe  System          150 ThreadWrapper
  004ab129 MyProgram.exe  madExcept           CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept           ThreadExceptFrame
  75223368 kernel32.dll                       BaseThreadInitThunk
  &gt;&gt; created by thread $2258 (TOmniThread) at:
  0076348c MyProgram.exe  OtlThreadPool   537 TOTPWorkerThread.Create
  
  thread $3248 (TOTPWorkerThread): &lt;priority:-15&gt;
  771d0156 ntdll.dll                          NtWaitForMultipleObjects
  761215e3 KERNELBASE.dll                     WaitForMultipleObjectsEx
  752219f7 kernel32.dll                       WaitForMultipleObjectsEx
  752241d3 kernel32.dll                       WaitForMultipleObjects
  0074b749 MyProgram.exe  DSiWin32       1949 DSiWaitForTwoObjects
  007782ca MyProgram.exe  OtlComm         478 TOmniCommunicationEndpoint.ReceiveWait
  007639cc MyProgram.exe  OtlThreadPool   625 TOTPWorkerThread.Execute
  004ab243 MyProgram.exe  madExcept           HookedTThreadExecute
  0053c596 MyProgram.exe  System.Classes      ThreadProc
  0040a5b4 MyProgram.exe  System          150 ThreadWrapper
  004ab129 MyProgram.exe  madExcept           CallThreadProcSafe
  004ab18e MyProgram.exe  madExcept           ThreadExceptFrame
  75223368 kernel32.dll                       BaseThreadInitThunk
  &gt;&gt; created by thread $2258 (TOmniThread) at:
  0076348c MyProgram.exe  OtlThreadPool   537 TOTPWorkerThread.Create
  
  thread $11c8:
  771d1f3f ntdll.dll     NtWaitForWorkViaWorkerFactory
  75223368 kernel32.dll  BaseThreadInitThunk
  </code></pre>
  
  <p>With reference to <a href="https://stackoverflow.com/a/10113999/133516">this answer of another question</a>, it seems that the Windows message queue used as the communication channel by OTL is full.</p>