anchor.diff:        (bt:destroy-thread worker)))
     (setf (workers pool) (list))
   
  -  (format t "Destroying worker sockets.~%")
  +  (format t "Destroying worker socket.~%")
     (when-let (sock (work-sock pool))
  -    (zmq:close (work-sock pool)))
  +    (setf (work-sock pool) nil)
  +    (zmq:close sock))
  +  (format t "Destroying result socket.~%")
     (when-let (sock (result-sock pool))
  +    (setf (result-sock pool) nil)
       (close sock))
   
     (format t "TODO: Fail remaining callbacks in ~A~%" (work pool)))
  
positive.code: (in-package :hinge)
  
  ;; Helpers
  (defun make-safe-hash-table (&rest args &key)
    "Wrapper to return a hash table that is safe
  to use concurrently. `args' are passed on as to `make-hash-table'"
    ;; TODO: Feature checks for other lisps
  
negative.code:             :accessor workers
              :documentation "The collection of worker threads.")
  
     (work :initform (make-safe-hash-table :test 'equalp)
           :accessor work
           :documentation "A mapping of string job ids to `job' objects
  scheduled or running in the thread pool.")))
  