clojure.core.async.impl.protocols
(active? h)
returns true if has callback. Must work w/o lock
(add!* b itm)
if room, add item to the buffer, returns b, called under chan mutex
(blockable? h)
returns true if this handler may be blocked, otherwise it must not block
(commit h)
commit to fulfilling its end of the transfer, returns cb. Must be called within lock
(full? b)
returns true if buffer cannot accept put
(lock-id h)
a unique id for lock acquisition order, 0 if no lock
(remove! b)
remove and return next item from buffer, called under chan mutex