def reopen_after_fork!
#       logger.debug { "#{self.class}##{__method__}" }

      unless @state == :paused
        raise InvalidStateError, "state should have been :paused, not: #{@state.inspect}"
      end

      if @thread 
        raise InvalidStateError, "WTF?! did you fork in a callback? my thread was alive!" if @thread.alive?
        @thread = nil
      end

      @mutex  = Mutex.new
      @cond   = ConditionVariable.new
      @array  = []
      resume_after_fork_in_parent
    end
def reopen_after_fork!
#       logger.debug { "#{self.class}##{__method__}" }

      unless @state == :paused
        raise InvalidStateError, "state should have been :paused, not: #{@state.inspect}"
      end

      if @thread 
        raise InvalidStateError, "WTF?! did you fork in a callback? my thread was alive!" if @thread.alive?
        @thread = nil
      end

      @mutex  = Mutex.new
      @cond   = ConditionVariable.new
      @array  = []
      resume_after_fork_in_parent
    end
called after a fork to replace a dead delivery thread
 special case, there should be ONLY ONE THREAD RUNNING,
 (the one that survived the fork)

 @private