SATBMarkQueueSet::apply_closure_to_completed_buffer() presently takes a worker_id index. It uses that to look up the closure associated with the worker by a preceding call to set_closure.
There is only one caller of this apply function, CMTask::drain_satb_buffers. It creates the desired closure, associates the closure with its worker id, and then calls apply_closure_to_completed_buffer.
We could eliminate set_closure and the underlying data structure, by simply having the apply_closure_xxx function take the closure as an argument rather than the worker id.