code: func (q *Type) Done(item interface{}) {
  	q.cond.L.Lock()
  	defer q.cond.L.Unlock()
  	q.processing.delete(item)
  	if q.dirty.has(item) {
  		q.queue = append(q.queue, item)
  		q.cond.Signal()
  	}
  }
docs: // Done marks item as done processing, and if it has been marked as dirty again
  // while it was being processed, it will be re-added to the queue for
  // re-processing.