unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@IRO.UMontreal.CA>
To: Benjamin Slade <slade@jnanam.net>
Cc: emacs-devel@gnu.org
Subject: Re: Emacs 24.0.50.1, Flyspell, and "blocking call to accept-process-output with quit inhibited!!"
Date: Wed, 14 Sep 2011 15:15:25 -0400	[thread overview]
Message-ID: <jwvipov2c0t.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <CAH+j8rCXuOD=Dxmj5FKh3yFWrajGgMgkDMcPUc+8xN53s=6gPg@mail.gmail.com> (Benjamin Slade's message of "Wed, 14 Sep 2011 12:37:10 -0500")

> Using Emacs 24.0.50.1 with the flyspell package generates a (constantly
> repeating and annoying) message "blocking call to accept-process-output with
> quit inhibited!!". It doesn't actually seem to "block" anything as flyspell
> still functions as expected, but it's annoying.

The message simply indicates that the code waits for some external event
(in this case answer from ispell) while quit is inhibited, which implies
that if ispell decides to take its time, Emacs will hang.
I.e. it indicates of a latent bug in flyspell.el.

> Or something which can be fixed/hacked in Flyspell?

Can you try the patch below?


        Stefan


=== modified file 'lisp/textmodes/flyspell.el'
--- lisp/textmodes/flyspell.el	2011-09-11 02:14:10 +0000
+++ lisp/textmodes/flyspell.el	2011-09-14 19:14:21 +0000
@@ -931,9 +931,10 @@
 ;;*       previous word nor the current word                            */
 ;;*---------------------------------------------------------------------*/
 (defun flyspell-post-command-hook ()
-  "The `post-command-hook' used by flyspell to check a word in-the-fly."
+  "The `post-command-hook' used by flyspell to check a word on-the-fly."
   (interactive)
   (when flyspell-mode
+    (with-local-quit
     (let ((command this-command)
 	  ;; Prevent anything we do from affecting the mark.
 	  deactivate-mark)
@@ -946,6 +947,7 @@
       (if (flyspell-check-word-p)
 	  (progn
 	    '(flyspell-debug-signal-word-checked)
+              ;; FIXME: This should be asynchronous!
 	    (flyspell-word)
 	    ;; we remember which word we have just checked.
 	    ;; this will be used next time we will check a word
@@ -960,7 +962,8 @@
 	  (setq flyspell-pre-pre-point  nil)
 	  ;; when a word is not checked because of a delayed command
 	  ;; we do not disable the ispell cache.
-	  (if (and (symbolp this-command) (get this-command 'flyspell-delayed))
+            (if (and (symbolp this-command)
+                     (get this-command 'flyspell-delayed))
 	      (progn
 		(setq flyspell-word-cache-end -1)
 		(setq flyspell-word-cache-result '_)))))
@@ -973,7 +976,7 @@
 		(goto-char start)
 		(flyspell-word)))
 	  (setq flyspell-changes (cdr flyspell-changes))))
-      (setq flyspell-previous-command command))))
+        (setq flyspell-previous-command command)))))
 
 ;;*---------------------------------------------------------------------*/
 ;;*    flyspell-notify-misspell ...                                     */
@@ -1100,14 +1103,10 @@
                   ;; we mark the ispell process so it can be killed
                   ;; when emacs is exited without query
                   (set-process-query-on-exit-flag ispell-process nil)
-                  ;; Wait until ispell has processed word.  Since this
-                  ;; code is often executed from post-command-hook but
-                  ;; the ispell process may not be responsive, it's
-                  ;; important to make sure we re-enable C-g.
-                  (with-local-quit
+                  ;; Wait until ispell has processed word.
                     (while (progn
                              (accept-process-output ispell-process)
-                             (not (string= "" (car ispell-filter))))))
+                           (not (string= "" (car ispell-filter)))))
                   ;; (ispell-send-string "!\n")
                   ;; back to terse mode.
                   ;; Remove leading empty element




  reply	other threads:[~2011-09-14 19:15 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-14 17:37 Emacs 24.0.50.1, Flyspell, and "blocking call to accept-process-output with quit inhibited!!" Benjamin Slade
2011-09-14 19:15 ` Stefan Monnier [this message]
2011-10-11 23:10   ` Benjamin Slade
2011-10-12  2:49     ` Stefan Monnier
     [not found]       ` <CAH+j8rAUacPONszJPBhJ9eXKKved6qyEZOFRVB+q31awP7y4DA@mail.gmail.com>
2011-10-12  3:55         ` Benjamin Slade
2011-10-12 14:36           ` Benjamin Slade
2011-10-12 17:51             ` Stefan Monnier
2011-10-12 20:27               ` Benjamin Slade

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwvipov2c0t.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=emacs-devel@gnu.org \
    --cc=slade@jnanam.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).