Hi all, I've been using SLIME in XEmacs for years now and am very happy with it. Recently, however, I updated from CVS and XEmacs started unrecoverably[1] freezing up from time to time. I didn't connect the two until more recently because it didn't seem to be related to doing anything in particular.
Based on the stack trace I get when I am eventually forced to kill it, I'm guessing it's related to the following set of changes:
2010-08-22 Stas Boukarev stassats@gmail.com
* slime.el (slime-xemacs-recompute-modelines): Add `slime-xemacs-recompute-modelines' to `pre-idle-hook', this solves the problem of synchronization of modelines. Thanks to Aidan Kehoe.
2010-08-21 Stas Boukarev stassats@gmail.com
* slime.el (slime-recompute-modelines): Recompute modelines only for visible buffers. Kludge: modeline can be out of sync if the buffer becomes visible and no slime/lisp interaction took place yet. Patch by Raymond Toy. (slime-search-buffer-package): Revert, with the above change caching shouldn't be necessary.
I took a glance at the relevant functions in slime.el but nothing jumped out at me. Then again, I'm only moderately proficient in (X)Emacs Lisp.
Gentoo app-editors/xemacs-21.4.22-r1
XEmacs 21.4 (patch 22) "Instant Classic" [Lucid] (i686-pc-linux, Mule)
SLIME 2010-12-10 (although it started when I updated to 2010-11-13 and that's when I saved the backtrace)
Any help tracking down what could be going on or how to fix it would be greatly appreciated. With some pointers I'm happy to help code/test a fix.
Lisp backtrace follows:
# (unwind-protect ...) (when (or (symbol-value-in-buffer ... object) (symbol-value-in-buffer ... object)) (with-current-buffer object (setq redraw-modeline ...))) # bind (object) (lambda (object) (setq object (window-buffer object)) (when (or ... ...) (with-current-buffer object ...)))(#<window on "science-rumors.org" 0x38b5c>) # bind (walk-windows-current walk-windows-start which-devices which-frames minibuf function) walk-windows((lambda (object) (setq object (window-buffer object)) (when (or ... ...) (with-current-buffer object ...))) never visible) # bind (redraw-modeline) (let (redraw-modeline) (walk-windows (lambda ... ... ...) (quote never) (quote visible)) (and redraw-modeline (redraw-modeline t))) slime-xemacs-recompute-modelines() # (condition-case ... . error) # (condition-case ... . error) # (catch top-level ...)
Footnotes: [1] Sometimes it does actually come back if I keep hitting C-g, sometimes I only get the scrollbars and similar widgets to reappear, sometimes it doesn't help at all.