         # File lib/eventmachine.rb, line 222
    222:         def EventMachine::run blk=nil, tail=nil, &block
    223:                 @tails ||= []
    224:                 tail and @tails.unshift(tail)
    225:
    226:                 if reactor_running?
    227:                         (b = blk || block) and b.call # next_tick(b)
    228:                 else
    229:                         @conns = {}
    230:                         @acceptors = {}
    231:                         @timers = {}
    232:                         @wrapped_exception = nil
    233:                         begin
    234:                                 @reactor_running = true
    235:                                 initialize_event_machine
    236:                                 (b = blk || block) and add_timer(0, b)
    237:                                 if @next_tick_queue && !@next_tick_queue.empty?
    238:                                         add_timer(0) { signal_loopbreak }
    239:                                 end
    240:                                 run_machine
    241:                         ensure
    242:                           begin
    243:                                   release_machine
    244:                           ensure
    245:                                 if @threadpool
    246:                                   @threadpool.each { |t| t.exit }
    247:                                   @threadpool.each { |t| t.kill! if t.alive? }
    248:                                   @threadqueue = nil
    249:                                   @resultqueue = nil
    250:                           end
    251:                                 @threadpool = nil
    252:                                 end
    253:                                 @reactor_running = false
    254:                         end
    255:
    256:                         until @tails.empty?
    257:                                 @tails.pop.call
    258:                         end
    259:
    260:                         raise @wrapped_exception if @wrapped_exception
    261:                 end
    262:         end