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:
- 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.
- 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.
- That queue’s workerThread object is 0x290facb8, with internal thread object 0x34dcf018 and managed ID 58, corresponding to OS thread 0x7d80 (debugger index 37).
- Synchronization thread 0x7d80 waits for reminder lock 0x07f94cdc in ReminderManager.ProcessRemovedScheduleItems. Its stack includes ExchangeFolderSynchronizer.GetFolderList, AccountUtils.DeleteAccountData and RemoveFolderData.
- 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.