Subject: Re: bug#9087: Crash reading from minibuffer with icomplete-mode

From: Eli Zaretskii <[email-masked]>
Date: Fri, 06 Jan 2012 22:50:30 +0200

> Date: Fri, 06 Jan 2012 21:53:17 +0200
> From: Eli Zaretskii <[email-masked]>
> Cc: [email-masked], [email-masked], [email-masked]
> 
> > Date: Fri, 06 Jan 2012 20:45:03 +0100
> > From: martin rudalics <[email-masked]>
> > CC: [email-masked], [email-masked], [email-masked]
> > 
> >  > If you meant this:
> >  >
> >  >   emacs -Q --eval "(setq debug-on-quit t)" -l triggerbug.el
> >  >
> >  > then it doesn't help.
> > 
> > I added
> > 
> > (setq debug-on-quit t)
> > 
> > to triggerbug.el, visit that file with emacs -Q, invoke
> > `emacs-lisp-byte-compile-and-load', and hit a key while I read "now!".
> 
> I see the reason why I couldn't reproduce this: it is only
> reproducible with a byte-compiled triggerbug.elc.  I initially tried
> with triggerbug.el.

I can avoid the crash with the patch below.  But it defers the
throwing until Emacs is done whatever it was doing (in this case,
evaluating byte code).  Is this acceptable?  If not, what can we do to
make the throwing more "immediate"?

Claudio, can you see if this patch gives good results with
ido-find-file?

And why in the world isn't throw-on-input described in the ELisp
manual???

=== modified file 'src/w32fns.c'
--- src/w32fns.c	2012-01-05 09:46:05 +0000
+++ src/w32fns.c	2012-01-06 20:33:25 +0000
@@ -2479,6 +2479,7 @@ signal_user_input (void)
   if (!NILP (Vthrow_on_input))
     {
       Vquit_flag = Vthrow_on_input;
+#if 0
       /* If we're inside a function that wants immediate quits,
 	 do it now.  */
       if (immediate_quit && NILP (Vinhibit_quit))
@@ -2486,6 +2487,7 @@ signal_user_input (void)
 	  immediate_quit = 0;
 	  QUIT;
 	}
+#endif
     }
 }