_fn = function( job ) {
    if( job && self.job && job.id != self.job.id ) {
      return; // simply ignore older job events currently being received until the right one comes...
    }
    shutdownTimer && clearTimeout(shutdownTimer);
    self.removeAllListeners();
    self.job        = null;
    //Safeyly kill any blpop's that are waiting.
    (self.type in clients) && clients[ self.type ].quit();
    delete clients[ self.type ];
    self.cleaned_up = true;
    //fix half-blob job fetches if any
    self.client.lpush(self.client.getKey(self.type + ':jobs'), 1, fn || noop);
  }
Gracefully shut down the worker

@param {Function} fn
@param {int} timeout
@api private