Can you please try the patch below and see if it prevents the
lock-ups?
=== modified file 'src/w32proc.c'
--- src/w32proc.c 2012-11-05 03:18:32 +0000
+++ src/w32proc.c 2012-11-13 16:59:53 +0000
@@ -431,13 +431,24 @@ timer_loop (LPVOID arg)
/* Simulate a signal delivered to the thread which installed
the timer, by suspending that thread while the handler
runs. */
- DWORD result = SuspendThread (itimer->caller_thread);
+ DWORD result;
+
+ if (dwMainThreadId)
+ enter_crit ();
+ result = SuspendThread (itimer->caller_thread);
if (result == (DWORD)-1)
- return 2;
+ {
+ if (dwMainThreadId)
+ leave_crit ();
+ return 2;
+ }
handler (sig);
ResumeThread (itimer->caller_thread);
+
+ if (dwMainThreadId)
+ leave_crit ();
}
/* Update expiration time and loop. */