Subject: bug#12832: 24.3.50; Emacs lockup when idle

From: Andy Moreton <[email-masked]>
Date: Wed, 14 Nov 2012 12:44:39 +0000

On 13/11/2012 17:04, Eli Zaretskii wrote:
> 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.  */
>

I applied this to emacs-24 branch (r110866) this morning. So far I've not seen 
a lockup, but I'll to run it for a day or two to be sure.

     AndyM