anchor.diff:  ;; internally. Therefore, binding some of them may cause the implimentation
   ;; to malfunction.  (6. Signal handling,
   ;; http://www.sbcl.org/sbcl-internals/index.html)
  -
  -#+debug
  -(defvar *handler-lock* (bt:make-lock "handler-lock")
  -  "force the handler processing to be synchronous")
   
   (define-condition unix-signal ()
     ((signo :initarg :signo :reader signo))
  
positive.code:     (unwind-protect
          (progn
            (unless *listening-signal-p* ;; called only on the toplevel stack
              #+debug
              (bt:with-lock-held (*handler-lock*)
                (format t "~&Registering the current thread as a listener: ~a"
                        (bt:current-thread))
                (force-output))
              (bt:with-lock-held (*listener-threads-lock*)
                (setf (gethash (bt:current-thread) *listener-threads*) t)))
            ;; Only the additional signals are enabled.  It is possible
            ;; that a new signal is received while partly enabling these
            ;; signals before running ,@forms ...
            #+debug
            (bt:with-lock-held (*handler-lock*)
              (format t "~&Enabling signal handlers: ~a"
                      (bt:current-thread)))
            (%enable-all-signal-handlers next-enabled-signals)
            (let* ((*listening-signal-p* t))
              #+ccl
  
negative.code:             (funcall fn)))
        ;; however in any cases, the partly/fully enabled singals are
        ;; correctly disabled.
        (%disable-all-signal-handlers next-enabled-signals)
        (unless *listening-signal-p* ;; called only on the toplevel stack
          (bt:with-lock-held (*listener-threads-lock*)
            (remhash (bt:current-thread) *listener-threads*))))))
  
  