[slime-devel] ABORT restart in OpenMCL not working

David Steuber david at david-steuber.com
Sat May 1 04:28:55 UTC 2004


Luke Gorrie <luke at bluetail.com> writes:

> Howdy,
> 
> If you fire up SLIME in OpenMCL and pull up SLDB (e.g. with (/ 1 0))
> then it seems the ABORT restart ('a') doesn't work. Invoking it seems
> to just return nil instead of aborting the evaluation.
> 
> Anyone know what's up?

I had to do an update from CVS and rebuild and restart Emacs.

I have no idea how to debug this, but here is what I have observed
with Activity Monitor.  When SLIME is started the openmcl process is
known as dppccl.  It starts with 6 (six!) threads.  It runs with 3
threads initially when started from bash.

After trying (/ 1 0) and trying anything to get out of the debugger,
I end up with just 5 threads.  The REPL no longer gets any more
prompts although I did get an evaluation aborted message.

The *inferior-lisp* buffer is still active and still working.

Here are my buffers.  I had no idea *slime-events* was folded when I
copied it.  Sorry.  Just trying to give out info to the people who
know what all this voodoo means.

*slime-repl*

; SLIME 2004-05-01
CL-USER> (/ 1 0)
Invoking restart: #<RESTART ABORT #x41354E36>
; Evaluation aborted

*slime-events*

(:emacs-rex
 (swank:connection-info)
 nil t
 (lambda
     (&rest --cl-rest--)
   (apply
    (lambda
        (G100092 G100083)
      (let*
          ((tmp-100089 G100083)
           (op-100087
            (car tmp-100089))
           (rand-100088
            (cdr tmp-100089)))
        (cond
          ((eql op-100087 ':ok)
           (let*
               ((--rest--100090 rand-100088)
                (result
                 (if
                  (=
                   (length --rest--100090)
                   1)
                  (car --rest--100090)
                  (signal 'wrong-number-of-arguments
                          (list nil
                                (length --rest--100090))))))
             (funcall
              (symbol-value G100092)
              result)))
          ((eql op-100087 ':abort)
           (let*
               ((--rest--100091 rand-100088))
             (if --rest--100091
                 (signal 'wrong-number-of-arguments
                         (list nil
                               (+ 0
                                  (length --rest--100091)))))
             (message "Evaluation aborted.")))
          (t
           (error "destructure-case failed: %S" tmp-100089)))))
    '--cont-- --cl-rest--)))
(:open-dedicated-output-stream 55319)
(:indentation-update
 (("do-external-symbols" . 1)
  ("do-all-symbols" . 1)
  ("multiple-value-bind" . 2)
  ("prog*" . 1)
  ("do-symbols" . 1)
  ("dolist" . 1)
  ("pprint-logical-block" . 1)
  ("ecase" . 1)
  ("case" . 1)
  ("unless" . 1)
  ("do" . 2)
  ("restart-bind" . 1)
  ("etypecase" . 1)
  ("ctypecase" . 1)
  ("typecase" . 1)
  ("dotimes" . 1)
  ("when" . 1)
  ("prog" . 1)
  ("lambda" . 1)
  ("do*" . 2)
  ("handler-bind" . 1)
  ("psetq" . 0)
  ("destructuring-bind" . 2)
  ("print-unreadable-object" . 1)
  ("ccase" . 1)
  ("without-gcing" . 0)
  ("while" . 1)
  ("%ilogior" . 1)
  ("ignoring-without-interrupts" . 0)
  ("once-only" . 1)
  ("do-inactive-lisp-threads" . 1)
  ("%with-recursive-lock-ptr" . 1)
  ("do-unexhausted-lisp-threads" . 1)
  ("ensuring-node-target" . 1)
  ("restoring-interrupt-level" . 1)
  ("%with-recursive-lock-ptr-maybe" . 1)
  ("%ilogxor" . 1)
  ("in-development-mode" . 0)
  ("iterate" . 2)
  ("do-interface-dirs" . 1)
  ("do-db-links" . 1)
  ("qlfun" . 2)
  ("%ilogand" . 1)
  ("until" . 1)
  ("do-dll-nodes" . 1)
  ("collect" . 1)
  ("do-consing-areas" . 1)
  ("do-gc-areas" . 1)
  ("do-present-symbols" . 1)
  ("numeric-dispatch" . 1)
  ("pprint-logical-block+" . 1)
  ("using-resource" . 1)
  ("rletz" . 1)
  ("rlet" . 1)
  ("catch-cancel" . 0)
  ("without-interrupts" . 0)
  ("%vstack-block" . 1)
  ("dovector" . 1)
  ("%stack-block" . 1)
  ("let-globally" . 1)
  ("without-interrupts" . 0)))
(:return
  (:ok
   ("2004-05-01" 19821 "OpenMCL" "openmcl"
                 (:primary-classes :ccl :ccl-2 :ccl-3 :ccl-4 :coral :common-lisp :mcl :openmcl :ansi-cl :processes :unix :openmcl-native-threads :openmcl-partial-mop :mcl-common-mop-subset :openmcl-mop-2 :interfaces-2 :powerpc :ppc-target :ppc-clos :ppc32-target :ppc32-host :darwinppc-target :darwinppc-host :darwin :poweropen-target)))
  14)
(:emacs-rex
 (swank:arglist-for-echo-area
  '("/"))
 "CL-USER" :repl-thread
 (lambda
     (&rest --cl-rest--)
   (apply
    (lambda
        (G100118 G100109)
      (let*
          ((tmp-100115 G100109)
           (op-100113
            (car tmp-100115))
           (rand-100114
            (cdr tmp-100115)))
        (cond
          ((eql op-100113 ':ok)
           (let*
               ((--rest--100116 rand-100114)
                (result
                 (if
                  (=
                   (length --rest--100116)
                   1)
                  (car --rest--100116)
                  (signal 'wrong-number-of-arguments
                          (list nil
                                (length --rest--100116))))))
             (funcall
              (symbol-value G100118)
              result)))
          ((eql op-100113 ':abort)
           (let*
               ((--rest--100117 rand-100114))
             (if --rest--100117
                 (signal 'wrong-number-of-arguments
                         (list nil
                               (+ 0
                                  (length --rest--100117)))))
             (message "Evaluation aborted.")))
          (t
           (error "destructure-case failed: %S" tmp-100115)))))
    '--cont-- --cl-rest--)))
(:return
  (:ok "(/ arg-0 &rest the-rest)")
  15)
(:emacs-rex
 (swank:arglist-for-echo-area
  '("/"))
 "CL-USER" :repl-thread
 (lambda
     (&rest --cl-rest--)
   (apply
    (lambda
        (G100132 G100123)
      (let*
          ((tmp-100129 G100123)
           (op-100127
            (car tmp-100129))
           (rand-100128
            (cdr tmp-100129)))
        (cond
          ((eql op-100127 ':ok)
           (let*
               ((--rest--100130 rand-100128)
                (result
                 (if
                  (=
                   (length --rest--100130)
                   1)
                  (car --rest--100130)
                  (signal 'wrong-number-of-arguments
                          (list nil
                                (length --rest--100130))))))
             (funcall
              (symbol-value G100132)
              result)))
          ((eql op-100127 ':abort)
           (let*
               ((--rest--100131 rand-100128))
             (if --rest--100131
                 (signal 'wrong-number-of-arguments
                         (list nil
                               (+ 0
                                  (length --rest--100131)))))
             (message "Evaluation aborted.")))
          (t
           (error "destructure-case failed: %S" tmp-100129)))))
    '--cont-- --cl-rest--)))
(:return
  (:ok "(/ arg-0 &rest the-rest)")
  16)
(:emacs-rex
 (swank:listener-eval "(/ 1 0)\n")
 "CL-USER" :repl-thread
 (lambda
     (G100138)
   (let*
       ((tmp-100143 G100138)
        (op-100141
         (car tmp-100143))
        (rand-100142
         (cdr tmp-100143)))
     (cond
       ((eql op-100141 ':ok)
        (let*
            ((--rest--100144 rand-100142)
             (result
              (if
               (=
                (length --rest--100144)
                1)
               (car --rest--100144)
               (signal 'wrong-number-of-arguments
                       (list nil
                             (length --rest--100144))))))
          (save-current-buffer
            (set-buffer
             (slime-output-buffer))
            (slime-repl-insert-prompt result))))
       ((eql op-100141 ':abort)
        (let*
            ((--rest--100145 rand-100142))
          (if --rest--100145
              (signal 'wrong-number-of-arguments
                      (list nil
                            (+ 0
                               (length --rest--100145)))))
          (slime-repl-show-abort)))
       (t
        (error "destructure-case failed: %S" tmp-100143))))))
(:debug 5 1
        ("DIVISION-BY-ZERO detected \nperforming 'TRUNCATE on (1 0)" "   [Condition of type DIVISION-BY-ZERO]")
        (("ABORT" "Abort handling SLIME request.")
         ("ABORT-BREAK" "#<RESTART ABORT-BREAK #x41354E0E>")
         ("ABORT" "#<RESTART ABORT #x41354E36>"))
        ((0 "(CCL::DIVIDE-BY-ZERO-ERROR 'TRUNCATE)")
         (1 "(CCL::%FIXNUM-TRUNCATE)")
         (2 "(CCL::INTEGER-/-INTEGER)")
         (3 "(/)")
         (4 "(CCL::CALL-CHECK-REGS /)")
         (5 "(SWANK::EVAL-REGION (/ 1 0)\n T)")
         (6 "(SWANK:LISTENER-EVAL (/ 1 0)\n)")
         (7 "(CCL::CALL-CHECK-REGS LISTENER-EVAL)")
         (8 "(SWANK::EVAL-FOR-EMACS (LISTENER-EVAL (/ 1 0)\n) CL-USER 17)")
         (9 "(FUNCALL EVAL-FOR-EMACS)")
         (10 "(SWANK::READ-FROM-EMACS)")
         (11 "(Anonymous Function #x53A5F06)")
         (12 "(SWANK::CALL-WITH-REDIRECTED-IO #S(CONNECTION :SOCKET-IO #<TCP-STREAM (SOCKET/14) #x53BF10E> :DEDICATED-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-INPUT #<SLIME-INPUT-STREAM #x53BE5F6> :USER-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-IO #<TWO-WAY-STREAM input #<SWANK-BACKEND::SLIME-INPUT-STREAM #x53BE5F6>, output #<TCP-STREAM (SOCKET/15) #x53BE9E6> #x53BE5B6> :CONTROL-THREAD #<PROCESS control-thread(3) [Active] #x53BDD8E> :READER-THREAD #<PROCESS reader-thread(4) [Active] #x53BDB96> :REPL-THREAD #<PROCESS repl-thread(5) [Active] #x53BD9A6> :READ #<Compiled-function READ-FROM-CONTROL-THREAD #x539F94E> :SEND #<Compiled-function SEND-TO-CONTROL-THREAD #x539ED0E> :SERVE-REQUESTS #<Compiled-function SPAWN-THREADS-FOR-CONNECTION #x53A297E> :CLEANUP NIL :INDENTATION-CACHE #<HASH-TABLE :TEST EQ size 61/90 #x53BEB96> :INDENTATION-CACHE-PACKAGES (#<Package \"SWANK-COMPLETION-TEST\"> #<Package \"SWANK-IO-PACKAGE\"> #<Package \"SWANK\"> #<Package \"NREGEX\"> #<P
 ackage \"SWANK-BACKEND\"> #<Package \"SWANK-LOADER\"> #<Package \"ILISP\"> #<Package \"PPC\"> #<Package \"PPC32\"> #<Package \"OPENMCL-MOP\"> #<Package \"GRAY\"> #<Package \"OPENMCL-SOCKET\"> #<Package \"INSPECTOR\"> #<Package \"OS\"> #<Package \"ARCH\"> #<Package \"ANSI-LOOP\"> #<Package \"COMMON-LISP-USER\"> #<Package \"SETF\"> #<Package \"CCL\"> #<Package \"COMMON-LISP\"> #<Package \"KEYWORD\">)) #<Anonymous Function #x53A5F06>)")
         (13 "(SWANK::HANDLE-REQUEST #S(CONNECTION :SOCKET-IO #<TCP-STREAM (SOCKET/14) #x53BF10E> :DEDICATED-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-INPUT #<SLIME-INPUT-STREAM #x53BE5F6> :USER-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-IO #<TWO-WAY-STREAM input #<SWANK-BACKEND::SLIME-INPUT-STREAM #x53BE5F6>, output #<TCP-STREAM (SOCKET/15) #x53BE9E6> #x53BE5B6> :CONTROL-THREAD #<PROCESS control-thread(3) [Active] #x53BDD8E> :READER-THREAD #<PROCESS reader-thread(4) [Active] #x53BDB96> :REPL-THREAD #<PROCESS repl-thread(5) [Active] #x53BD9A6> :READ #<Compiled-function READ-FROM-CONTROL-THREAD #x539F94E> :SEND #<Compiled-function SEND-TO-CONTROL-THREAD #x539ED0E> :SERVE-REQUESTS #<Compiled-function SPAWN-THREADS-FOR-CONNECTION #x53A297E> :CLEANUP NIL :INDENTATION-CACHE #<HASH-TABLE :TEST EQ size 61/90 #x53BEB96> :INDENTATION-CACHE-PACKAGES (#<Package \"SWANK-COMPLETION-TEST\"> #<Package \"SWANK-IO-PACKAGE\"> #<Package \"SWANK\"> #<Package \"NREGEX\"> #<Package \"
 SWANK-BACKEND\"> #<Package \"SWANK-LOADER\"> #<Package \"ILISP\"> #<Package \"PPC\"> #<Package \"PPC32\"> #<Package \"OPENMCL-MOP\"> #<Package \"GRAY\"> #<Package \"OPENMCL-SOCKET\"> #<Package \"INSPECTOR\"> #<Package \"OS\"> #<Package \"ARCH\"> #<Package \"ANSI-LOOP\"> #<Package \"COMMON-LISP-USER\"> #<Package \"SETF\"> #<Package \"CCL\"> #<Package \"COMMON-LISP\"> #<Package \"KEYWORD\">)))")
         (14 "(Anonymous Function #x53A235E)")
         (15 "(SWANK::CALL-WITH-REDIRECTED-IO #S(CONNECTION :SOCKET-IO #<TCP-STREAM (SOCKET/14) #x53BF10E> :DEDICATED-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-INPUT #<SLIME-INPUT-STREAM #x53BE5F6> :USER-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-IO #<TWO-WAY-STREAM input #<SWANK-BACKEND::SLIME-INPUT-STREAM #x53BE5F6>, output #<TCP-STREAM (SOCKET/15) #x53BE9E6> #x53BE5B6> :CONTROL-THREAD #<PROCESS control-thread(3) [Active] #x53BDD8E> :READER-THREAD #<PROCESS reader-thread(4) [Active] #x53BDB96> :REPL-THREAD #<PROCESS repl-thread(5) [Active] #x53BD9A6> :READ #<Compiled-function READ-FROM-CONTROL-THREAD #x539F94E> :SEND #<Compiled-function SEND-TO-CONTROL-THREAD #x539ED0E> :SERVE-REQUESTS #<Compiled-function SPAWN-THREADS-FOR-CONNECTION #x53A297E> :CLEANUP NIL :INDENTATION-CACHE #<HASH-TABLE :TEST EQ size 61/90 #x53BEB96> :INDENTATION-CACHE-PACKAGES (#<Package \"SWANK-COMPLETION-TEST\"> #<Package \"SWANK-IO-PACKAGE\"> #<Package \"SWANK\"> #<Package \"NREGEX\"> #<P
 ackage \"SWANK-BACKEND\"> #<Package \"SWANK-LOADER\"> #<Package \"ILISP\"> #<Package \"PPC\"> #<Package \"PPC32\"> #<Package \"OPENMCL-MOP\"> #<Package \"GRAY\"> #<Package \"OPENMCL-SOCKET\"> #<Package \"INSPECTOR\"> #<Package \"OS\"> #<Package \"ARCH\"> #<Package \"ANSI-LOOP\"> #<Package \"COMMON-LISP-USER\"> #<Package \"SETF\"> #<Package \"CCL\"> #<Package \"COMMON-LISP\"> #<Package \"KEYWORD\">)) #<COMPILED-LEXICAL-CLOSURE #x53BF9DE>)")
         (16 "(SWANK::REPL-LOOP #S(CONNECTION :SOCKET-IO #<TCP-STREAM (SOCKET/14) #x53BF10E> :DEDICATED-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-INPUT #<SLIME-INPUT-STREAM #x53BE5F6> :USER-OUTPUT #<TCP-STREAM (SOCKET/15) #x53BE9E6> :USER-IO #<TWO-WAY-STREAM input #<SWANK-BACKEND::SLIME-INPUT-STREAM #x53BE5F6>, output #<TCP-STREAM (SOCKET/15) #x53BE9E6> #x53BE5B6> :CONTROL-THREAD #<PROCESS control-thread(3) [Active] #x53BDD8E> :READER-THREAD #<PROCESS reader-thread(4) [Active] #x53BDB96> :REPL-THREAD #<PROCESS repl-thread(5) [Active] #x53BD9A6> :READ #<Compiled-function READ-FROM-CONTROL-THREAD #x539F94E> :SEND #<Compiled-function SEND-TO-CONTROL-THREAD #x539ED0E> :SERVE-REQUESTS #<Compiled-function SPAWN-THREADS-FOR-CONNECTION #x53A297E> :CLEANUP NIL :INDENTATION-CACHE #<HASH-TABLE :TEST EQ size 61/90 #x53BEB96> :INDENTATION-CACHE-PACKAGES (#<Package \"SWANK-COMPLETION-TEST\"> #<Package \"SWANK-IO-PACKAGE\"> #<Package \"SWANK\"> #<Package \"NREGEX\"> #<Package \"SWANK
 -BACKEND\"> #<Package \"SWANK-LOADER\"> #<Package \"ILISP\"> #<Package \"PPC\"> #<Package \"PPC32\"> #<Package \"OPENMCL-MOP\"> #<Package \"GRAY\"> #<Package \"OPENMCL-SOCKET\"> #<Package \"INSPECTOR\"> #<Package \"OS\"> #<Package \"ARCH\"> #<Package \"ANSI-LOOP\"> #<Package \"COMMON-LISP-USER\"> #<Package \"SETF\"> #<Package \"CCL\"> #<Package \"COMMON-LISP\"> #<Package \"KEYWORD\">)))")
         (17 "(Anonymous Function #x53A2616)")
         (18 "(CCL::RUN-PROCESS-INITIAL-FORM (#<COMPILED-LEXICAL-CLOSURE #x53BD96E>))")
         (19 "(Anonymous Function #x5103E76 (#<COMPILED-LEXICAL-CLOSURE #x53BD96E>))")))
(:debug-activate 6 1)
(:emacs-rex
 (swank:invoke-nth-restart-for-emacs 1 2)
 nil 5
 (lambda
     (G100182)
   (let*
       ((tmp-100187 G100182)
        (op-100185
         (car tmp-100187))
        (rand-100186
         (cdr tmp-100187)))
     (cond
       ((eql op-100185 ':ok)
        (let*
            ((--rest--100188 rand-100186)
             (value
              (if
               (=
                (length --rest--100188)
                1)
               (car --rest--100188)
               (signal 'wrong-number-of-arguments
                       (list nil
                             (length --rest--100188))))))
          (message "Restart returned: %s" value)))
       ((eql op-100185 ':abort)
        (let*
            ((--rest--100189 rand-100186))
          (if --rest--100189
              (signal 'wrong-number-of-arguments
                      (list nil
                            (+ 0
                               (length --rest--100189)))))))
       (t
        (error "destructure-case failed: %S" tmp-100187))))))
(:return
  (:abort)
  18)
(:debug-return 6 1)
(:return
  (:abort)
  17)
(:emacs-rex
 (swank:listener-eval "")
 nil :repl-thread
 (lambda
     (G100190)
   (let*
       ((tmp-100195 G100190)
        (op-100193
         (car tmp-100195))
        (rand-100194
         (cdr tmp-100195)))
     (cond
       ((eql op-100193 ':ok)
        (let*
            ((--rest--100196 rand-100194)
             (result
              (if
               (=
                (length --rest--100196)
                1)
               (car --rest--100196)
               (signal 'wrong-number-of-arguments
                       (list nil
                             (length --rest--100196))))))
          (save-current-buffer
            (set-buffer
             (slime-output-buffer))
            (slime-repl-insert-prompt ""))))
       (t
        (error "destructure-case failed: %S" tmp-100195))))))

*Messages*

Initial handshake...
Connected on port 55315. Take this REPL, brother, and may it serve you well.
(/ arg-0 &rest the-rest) [2 times]

*inferior-lisp*

Welcome to OpenMCL Version (Beta: Darwin) 0.14.1-p1!
? 
; Warning: These Swank interfaces are unimplemented:
;           (ADD-FD-HANDLER ADD-SIGIO-HANDLER LIST-CALLEES MACROEXPAND-ALL PROFILE PROFILE-PACKAGE PROFILE-REPORT PROFILE-RESET PROFILED-FUNCTIONS REMOVE-FD-HANDLERS REMOVE-SIGIO-HANDLERS UNPROFILE WHO-BINDS WHO-CALLS WHO-MACROEXPANDS WHO-REFERENCES WHO-SETS WHO-SPECIALIZES)
; While executing: SWANK-BACKEND::WARN-UNIMPLEMENTED-INTERFACES
#P"/Users/david/usr/src/slime/slime/swank-loader.lisp"
? ;; Swank started at port: 55315.
55315
? 

-- 
I wouldn't mind the rat race so much if it wasn't for all the damn cats.




More information about the slime-devel mailing list