# File lib/pr_eventmachine.rb, line 302
302:   def run
303:     raise Error.new( "already running" ) if @running
304:     @running = true
305: 
306:     begin
307:       open_loopbreaker
308: 
309:       loop {
310:         @current_loop_time = Time.now
311: 
312:         break if @stop_scheduled
313:         run_timers
314:         break if @stop_scheduled
315:         crank_selectables
316:         break if @stop_scheduled
317:         run_heartbeats
318:       }
319:     ensure
320:       close_loopbreaker
321:       @selectables.each {|k, io| io.close}
322:       @selectables.clear
323: 
324:       @running = false
325:     end
326: 
327:   end