anchor.diff:  or :ACCESS for destructive locking (see `acquire-access-lock')---during
   the execution of the body forms."
     `(call/locked-object (lambda () ,@body) ,object ,type ,timeout ,callback))
  +
  +(define-condition lock-timeout (serious-condition)
  +  ((type :initarg :type :initform nil :reader lock-timeout-type)
  +   (time :initarg :time :initform nil :reader lock-timeout-time)
  +   (object :initarg :object :initform nil :reader lock-timeout-object))
  +  (:documentation "Signalled when a lock times out.")
  +  (:report (lambda (c s)
  +             (format s "Could not acquire~@[ ~(~A~)~] lock~@[ for ~S~]~@[ after ~D seconds~]."
  +                     (lock-timeout-type c)
  +                     (lock-timeout-object c)
  +                     (lock-timeout-time c)))))
  +
  +(defun lock-timeout (object type time)
  +  "Signal a `lock-timeout' condition."
  +  (check-type type (member :read :access))
  +  (check-type time (integer 1))
  +  (signal 'lock-timeout :object object :type type :time time))
    
   ;;;;========================================================
  
positive.code: (flet ((mutex-managed-slot-p (o)
           (find (closer-mop:slot-definition-name o) '(thread-lock read-locks access-lock))))
    (defmethod closer-mop:slot-value-using-class :around (class (object synchronized-object-mixin) slotd)
      "Create a read-only lock for the duration of slot value fetching."
      (if (and (slot-boundp object 'thread-lock)
               (slot-boundp object 'read-locks)
               (slot-boundp object 'access-lock)
               (not (mutex-managed-slot-p slotd)))
          (with-locked-object (object :read)
            (call-next-method))
          (call-next-method)))
    (defmethod (setf closer-mop:slot-value-using-class) :around (value class (object synchronized-object-mixin) slotd)
      "Create an access lock for the duration of slot value setting."
      (if (and (slot-boundp object 'thread-lock)
               (slot-boundp object 'read-locks)
               (slot-boundp object 'access-lock)
               (not (mutex-managed-slot-p slotd)))
          (with-locked-object (object :access)
            (call-next-method))
          (call-next-method))))
  
negative.code:   (pushnew %indentation% swank::*application-hints-tables*))
  ;;;;========================================================
  ;;;; API routines
  (defparameter *slot-read-timeout* nil
    "The number of seconds to wait before timing out of a slot read.  The
  default is to not time out.
  
  This variable is special: either set it when creating the thread or bind
  it locally depending on the needs of the routine.")
  
  (defparameter *slot-write-timeout* nil
    "The number of seconds to wait before timing out of a slot write.  The
  default is to not time out.
  
  This variable is special: either set it when creating the thread or bind
  it locally depending on the needs of the routine.")
  
  (defgeneric acquire-read-lock (object &optional timeout callback)
    (:documentation "Lock the object for read-only access.  On success, true is returned.
  
  