eM Client 10.4.5674.0 freezes: Exchange/reminder deadlock

On October 5, 2026, I noticed eM Client was frozen when bringing its window into focus. The application had been running since October 1. A dump was captured before the processes were force-terminated to recover from the freeze.

Environment: Windows 11 Pro build 26200, eM Client 10.4.5674.0, 32-bit application, bundled .NET 8.0.30.

The dump establishes the following circular wait:

  1. Reminder timer thread 0x11318 (managed ID 48, debugger index 41) holds reminder lock 0x07f94cdc in ReminderManager.ScheduleTimerTrigger and waits for the Exchange account’s online lock in AccountBase.get_IsOnline.
  2. Offline-transition thread 0xbf34 (managed ID 20, debugger index 44) holds online lock 0x079eb0f4 and calls DefaultSynchronizationQueue.Dispose, which waits in Thread.Join for its worker.
  3. That queue’s workerThread object is 0x290facb8, with internal thread object 0x34dcf018 and managed ID 58, corresponding to OS thread 0x7d80 (debugger index 37).
  4. Synchronization thread 0x7d80 waits for reminder lock 0x07f94cdc in ReminderManager.ProcessRemovedScheduleItems. Its stack includes ExchangeFolderSynchronizer.GetFolderList, AccountUtils.DeleteAccountData and RemoveFolderData.
  5. UI thread 0xe810 (managed ID 1) also waits for reminder lock 0x07f94cdc in DesktopReminderManager’s SystemEvents_TimeChanged callback, freezing the window.

Network-change callbacks are blocked as well. Windows recorded resume from sleep at 09:27 and a time-service clock adjustment at 10:40 on the same morning. These events may be relevant, but the precise initiating event and time are unconfirmed. Bringing the window into focus is when the freeze was noticed, not a confirmed reproduction trigger.

The following diagnostic files are retained locally and can be supplied:

  • stacks-x86.txt: all managed thread stacks and thread identifiers
  • locks-x86.txt: sync block ownership and UI stack with locals
  • deadlock-details.txt: stacks with locals for the three threads in the circular wait
  • queue-thread.txt: synchronization queue and worker-thread object fields

A 32-bit heap dump of approximately 703 MB is retained locally and can be supplied through a private upload channel if required. Please advise whether this deadlock is known and whether a fix or workaround is available.

Selected thread stacks and lock ownership:

OS Thread Id: 0xe810
00D7DD00 76a25fac [HelperMethodFrame_1OBJ: 00d7dd00] System.Threading.Monitor.ReliableEnter(System.Object, Boolean ByRef)
00D7DDB0 12DA9274 MailClient.Reminders.DesktopReminderManager.<SystemEvents_TimeChanged>b__7_0()
00D7DDF4 21A1D0B8 MailClient.Common.UI.Marshalling.SafeBeginInvoke(System.Windows.Forms.Control, System.Action)
00D7DE08 2130A0EB MailClient.Reminders.DesktopReminderManager.SystemEvents_TimeChanged(System.Object, System.EventArgs)
00D7E804 1812E5C8 MailClient.Program+<>c.<Main>b__209_4()
00D7E9A0 132ADE6E MailClient.Common.UI.Forms.BaseForm.WndProc(System.Windows.Forms.Message ByRef)
00D7ED9C 07595628 MailClient.Program.Main(System.String[])

OS Thread Id: 0x7d80
1C36F388 7760a15c [HelperMethodFrame_1OBJ: 1c36f388] System.Threading.Monitor.ReliableEnter(System.Object, Boolean ByRef)
1C36F438 26074B4E MailClient.Reminders.ReminderManager.ProcessRemovedScheduleItems[[System.__Canon, System.Private.CoreLib]](System.Object, MailClient.Storage.ItemEventArgs`1<System.__Canon>)
1C36F7A8 23E1D2B3 MailClient.Storage.Application.EventScope.System.IDisposable.Dispose()
1C36F7D4 213CFEE7 MailClient.Protocols.AccountUtils.RemoveFolderData(MailClient.Accounts.IItemRepositories, MailClient.Storage.Query.QueryCondition)
1C36F848 213BFD0D MailClient.Protocols.AccountUtils.DeleteAccountData(MailClient.Storage.Application.Folder, Boolean)
1C36F8B8 180823D3 MailClient.Protocols.Exchange.ExchangeFolderSynchronizer.GetFolderList(MailClient.Protocols.Common.IListFoldersProgress, MailClient.Storage.Application.Folder, System.Threading.CancellationToken)
1C36FA28 1801CA3C MailClient.Protocols.Common.FolderSynchronizer+<>c__DisplayClass21_0.<RunEnqueueGetFolderList>b__0(MailClient.Commands.WorkerStatus, System.Threading.CancellationToken)
1C36FB9C 29C5DD1D MailClient.Protocols.Exchange.ExchangeGenericCommand.Execute(MailClient.Commands.WorkerStatus)
1C36FC28 227D8839 MailClient.Commands.Command.Process(MailClient.Commands.WorkerStatus)
1C36FC74 29C57079 MailClient.Commands.DefaultSynchronizationQueue.ThreadWorker(System.Object)

OS Thread Id: 0x11318
2784F780 7760a15c [HelperMethodFrame_1OBJ: 2784f780] System.Threading.Monitor.ReliableEnter(System.Object, Boolean ByRef)
2784F830 21CB1915 MailClient.Protocols.Common.AccountBase.get_IsOnline()
2784F864 2248EC3A MailClient.Reminders.ReminderManager.StartPostponingRemindersForOfflineAccount(MailClient.Accounts.IAccountWithFolder)
2784F908 2248E774 MailClient.Reminders.ReminderManager.ScheduleTimerTrigger(System.Object, System.EventArgs)

OS Thread Id: 0xbf34
2D89F284 7760a15c [HelperMethodFrame_1OBJ: 2d89f284] System.Threading.Thread.Join(Int32)
2D89F300 13040D9E MailClient.Commands.DefaultSynchronizationQueue.Dispose()
2D89F334 169F9606 MailClient.Protocols.Common.AccountBase.ChangeOnlineState(Boolean, MailClient.Accounts.OfflineReason)
2D89F4E8 13040842 MailClient.Protocols.Common.AccountBase.GoOffline(MailClient.Accounts.OfflineReason)
2D89F514 1304110A MailClient.Protocols.Exchange.ExchangeAccount.GoOfflineInt(MailClient.Accounts.OfflineReason)
2D89F53C 169F964C MailClient.Protocols.Common.AccountBase.ChangeOnlineState(Boolean, MailClient.Accounts.OfflineReason)
2D89F6F0 00EA38ED MailClient.Protocols.Common.AccountBase+<>c__DisplayClass38_0.<GoOfflineAsync>b__0(System.Object)

Sync block ownership:
Index SyncBlock MonitorHeld Recursion Owning Thread Info  SyncBlock Owner
  650 2DBDC850            5         2 2E0468E0 bf34  44   07998768 System.Object
 2595 351C9B50            3         2 2E0468E0 bf34  44   079eb0f4 System.Object
 2731 2DBA7F04            7         1 050E8C68 10cec  43   0799697c System.Object
 3057 2E36C5B4            5         1 2E048B20 11318  41   07f94cdc System.Object
00D7DD00 76a25fac [HelperMethodFrame_1OBJ: 00d7dd00] System.Threading.Monitor.ReliableEnter(System.Object, Boolean ByRef)
00D7DE08 2130A0EB MailClient.Reminders.DesktopReminderManager.SystemEvents_TimeChanged(System.Object, System.EventArgs)
00D7DE3C 1AC60139 DynamicClass.InvokeStub_EventHandler.Invoke(System.Object, System.Span`1<System.Object>)
00D7DE4C 2335F5A4 System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) [/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs @ 120]
00D7DEEC 2189B500 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) [/_/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.cs @ 107]
00D7DF24 2334E55C System.Delegate.DynamicInvokeImpl(System.Object[]) [/_/src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs @ 82]
00D7DF38 12D7FC44 Microsoft.Win32.SystemEvents+SystemEventInvokeInfo.InvokeCallback(System.Object) [/_/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft/Win32/SystemEvents.cs @ 1279]
00D7DF44 1AC600ED DynamicClass.InvokeStub_SendOrPostCallback.Invoke(System.Object, System.Span`1<System.Object>)
00D7DF50 2167216A System.Reflection.MethodBaseInvoker.InvokeWithOneArg(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) [/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs @ 74]
00D7DFD0 2189B580 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) [/_/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.cs @ 107]
00D7E008 2334E55C System.Delegate.DynamicInvokeImpl(System.Object[]) [/_/src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs @ 82]
00D7E034 21A18A66 System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(System.Object) [D:\winforms\src\System.Windows.Forms\src\System\Windows\Forms\Control.cs @ 6453]
00D7E05C 219410C8 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) [/_/src/libraries/System.Private.CoreLib/src/System/Threading/ExecutionContext.cs @ 154]
00D7E85C 1812E302 System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(System.Object) [D:\winforms\src\System.Windows.Forms\src\System\Windows\Forms\Control.cs @ 6463]
00D7E888 7424D181 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) [/_/src/libraries/System.Private.CoreLib/src/System/Threading/ExecutionContext.cs @ 179]
00D7E8C0 7424D110 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) [/_/src/libraries/System.Private.CoreLib/src/System/Threading/ExecutionContext.cs @ 143]

The queue’s workerThread object 0x290facb8 has internal thread object 0x34dcf018 and managed ID 58, matching OS thread 0x7d80 in clrthreads.