Fix menu command re-entrancy crash (switch-buffer segfault)
ober
3cf9124f0b26998ced08f679482b21a91bac349f
--- a/src/jerboa-emacs/qt/menubar.ss +++ b/src/jerboa-emacs/qt/menubar.ss @@ -7,6 +7,10 @@ :jerboa-emacs/qt/sci-shim :jerboa-emacs/core) +;; Re-entrancy guard: prevents menu actions from firing while a command +;; is already running (e.g. narrowing minibuffer calling process-events). +(def *menu-command-running?* #f) + ;;;============================================================================ ;;; Menu bar setup ;;;============================================================================ @@ -98,7 +102,16 @@ (action (qt-action-create display-label win))) ;; Do NOT call qt-action-set-shortcut! — it conflicts with the custom keymap. (qt-on-triggered! action - (lambda () (execute-command! app command-name))) + (lambda () + (unless *menu-command-running?* + (set! *menu-command-running?* #t) + (with-catch + (lambda (e) + (set! *menu-command-running?* #f) + (raise e)) + (lambda () + (execute-command! app command-name) + (set! *menu-command-running?* #f)))))) (qt-menu-add-action! menu action) action))