diff --git a/src/commonMain/kotlin/com/kdroid/composetray/lib/windows/WindowsTrayManager.kt b/src/commonMain/kotlin/com/kdroid/composetray/lib/windows/WindowsTrayManager.kt index 9660960..3483956 100644 --- a/src/commonMain/kotlin/com/kdroid/composetray/lib/windows/WindowsTrayManager.kt +++ b/src/commonMain/kotlin/com/kdroid/composetray/lib/windows/WindowsTrayManager.kt @@ -107,17 +107,21 @@ internal class WindowsTrayManager( tray.set(newTray) initialized.set(true) - // Signal that initialization is complete + // Signal that initialization is complete before entering the loop initLatch.countDown() // Run the blocking message loop on this thread runMessageLoop() - } catch (e: Exception) { + } catch (e: Throwable) { log("Error in tray thread: ${e.message}") e.printStackTrace() - initLatch.countDown() // Ensure latch is released even on error } finally { + // Safety net: release latch in case an Error prevented the + // countDown above from being reached. CountDownLatch.countDown() + // is a no-op when the count is already 0, so calling it twice + // on the success path is harmless. + initLatch.countDown() cleanupTray() } }.apply { diff --git a/winlib b/winlib index b78cb80..6a89226 160000 --- a/winlib +++ b/winlib @@ -1 +1 @@ -Subproject commit b78cb8033cd1a2d7ed0a0fe2cd593dad59ba633e +Subproject commit 6a892264367248fe15255f0146766a8002d09543