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:   (pushnew %indentation% swank::*application-hints-tables*))
  ;;;;========================================================
  ;;;; API routines
  (defgeneric acquire-read-lock (object &optional timeout callback)
    (:documentation "Lock the object for read-only access.  On success, true is returned.
  
  
negative.code: ;; THE SOFTWARE.
  (cl:defpackage :org.drurowin.synchronized-object
    (:use :cl :bordeaux-threads :org.drurowin.timeout)
    (:export #:*slot-read-timeout*
             #:*slot-write-timeout*
             #:lock-timeout
             #:lock-timeout-object
             #:lock-timeout-type
             #:lock-timeout-time
             #:acquire-read-lock
             #:release-read-lock
             #:acquire-access-lock
             #:release-access-lock
  