anchor.diff:             (with-interrupts-disabled ()
                (setf got-it (grab-mutex mutex :wait-p wait-p :timeout timeout)))
              (when got-it
  -             (funcall fn)))
  +             (assert (mutex-held-p mutex))
  +             (multiple-value-prog1 (funcall fn) (assert (mutex-held-p mutex)))))
         (with-interrupts-disabled ()
           (when got-it
             (release-mutex mutex))))))
  
positive.code:     (setf (mutex-owner mutex) nil)
      (return-from release-mutex))
    (ecase if-not-owner
      (:error (cerror "Attempting to release mutex ~S not owned by the current process."
                      mutex))
      (:warn (warn "Attempting to release mutex ~S not owned by the current process."
                   mutex))
  
negative.code:   (setf (process-whostate *current-process*) reason
          (process-wait-function *current-process*) function
          (process-wait-argument-list *current-process*) arguments)
    (process-yield)
    (setf (process-whostate *current-process*) nil))
  
  ;; todo, Fix this...
  (defun process-wait-with-timeout (reason timeout function &rest arguments)
    "Poll FUNCTION until it returns true, or until timeout expires.
  Returns true if the timeout has not expired. TIMEOUT may be false, for infinite timeout."
    (declare (dynamic-extent arguments))
    (cond (timeout
           (process-wait reason (lambda ()
                                  (if (<= (decf timeout) 0)
                                      t
                                      (apply function arguments))))
           (> timeout 0))
          (t (apply #'process-wait reason function arguments)
             t)))
  
  