Luke Gorrie luke@synap.se writes:
I'm tempted to accuse your Emacs of having a broken throw/catch, but that's dangerous talk.
Forget my previous message.
I found the problem, or at least I found a remedy that makes the problem go away. In slime-process-available-input, there's an extra attempt to read each buffer associated with slime-net-processes after the first set of events have been dispatched. If some input is available in these buffers, a follow-on call to slime-process-available-input gets scheduled.
,----[ slime-process-available-input ] | (dolist (p slime-net-processes) | (with-current-buffer (process-buffer p) | (when (slime-net-have-input-p) | (run-at-time 0 nil 'slime-process-available-input)))) `----
If I comment out this second attempt at reading, XEmacs no longer hangs. Putting some instrumentation in slime-process-available-input showed that slime-net-have-input always returns true (at least after reading the result of a frame-locals query per my example), indicating there's another event ready for reading.
If I replace the above form by:
,----[ slime-process-available-input (modified) ] | (dolist (p slime-net-processes) | (with-current-buffer (process-buffer p) | (when (slime-net-have-input-p) | (message "s-p-a-i: more available in process %s: %s." p | (slime-net-decode-length)) | ; (run-at-time 0 nil 'slime-process-available-input) | ))) `----
I see the following log message after each "throw" in slime-eval:
,---- | s-p-a-i: more available in process SLIME Lisp: 22. `----
The 22 count would match events like this:
,----[ *slime-events* sample ] | (:debug-activate 0 2) `----
that appear in *slime-events* after each local listing. Here are the events produced by hitting enter on a frame in SLDB:
,----[ *slime-events* sample ] | (:emacs-rex | (swank:frame-locals-for-emacs 1) | nil 0 86) | (:debug-activate 0 2) | (:return | (:ok | ((:name "N" :id 0 :value "1"))) | 86) | (:emacs-rex | (swank:frame-catch-tags-for-emacs 1) | nil 0 87) | (:debug-activate 0 2) | (:return | (:ok nil) | 87) `----
The corresponding messages in *Message Log* are:
,---- | s-p-a-i: have input in process SLIME Lisp. | s-p-a-i: have input in process SLIME Lisp. | Throwing result nil to tag slime-result-48471 | s-p-a-i: more available in process SLIME Lisp: 22. | Caught slime-result-48471 `----
Perhaps there's no appropriate handler for these "debug-activate" events. Please let me know if you need more information to help further diagnose the problem.