states: null, active, partial, full, empty location: NULL, NONE, AVAIL, ACTIVE, PARTIAL, PARTIAL_QUEUE
AVAIL -> out NULL -> out
null -> active
desc_alloc -> ACTIVE desc_alloc -> desc_retire
in -> AVAIL
active -> full
ACTIVE -> ACTIVE ACTIVE -> NONE ACTIVE -> update_active
active -> partial partial -> partial full -> partial
in -> ACTIVE in -> heap_put_partial
in -> PARTIAL PARTIAL -> list_put_partial
in -> PARTIAL_QUEUE
partial -> active partial -> full
heap_get_partial -> desc_retire heap_get_partial -> update_active
PARTIAL_QUEUE -> out PARTIAL_QUEUE -> desc_retire
PARTIAL -> out list_get_partial -> out
full -> partial active -> empty partial -> empty full -> empty