def once():
            synchronizer = ThreadSynchronizer()
            try:
                reactor = IOEventReactor(log_channel=chan)
                assert not reactor._event_loop_thread
                assert not reactor._poller
                assert not reactor.running
                assert reactor._reactor_state == REACTOR_STOPPED
                reactor.start()

                event_log = []
                def handle_event(reactor, fd, eventmask, timestamp):
                    event_log.append((reactor, fd, eventmask))
                    if fd is synchronizer.event_pipe.fileno():
                        synchronizer.sync_from_reactor_thread()
                    if eventmask & META_READ_EV:
                        chan.debug('read event (reactor state=%i)'%reactor._reactor_state)
                        return False
                    elif eventmask & META_WRITE_EV:
                        chan.debug(
                            'write event (reactor state=%i)'%reactor._reactor_state)
                    elif eventmask & META_DISCONNECTED_EV:
                        chan.debug(
                            'disconnected (reactor state=%i)'%reactor._reactor_state)
                        return True
                    elif eventmask == META_REACTOR_SHUTDOWN_EV:
                        chan.debug(
                            'shutdown event (reactor state=%i)'%reactor._reactor_state)
                        return True
                    else:
                        chan.error(
                            'unknown event (reactor state=%i)'%reactor._reactor_state)
                        return True
                reactor.register_handler(synchronizer.event_pipe, handle_event)
                #

                synchronizer.sync_from_main()
                assert len(event_log) == 1
                x = 15
                for _i in xrange(x):
                    synchronizer.sync_from_main()

                assert len(event_log) == x+1, len(event_log)

                assert reactor._reactor_state in (REACTOR_POLLING, REACTOR_DISPATCHING)
                assert reactor.running
                synchronizer.sync_from_main()
                assert reactor._reactor_state in (REACTOR_POLLING, REACTOR_DISPATCHING)
                for _reactor, fd, eventmask in event_log:
                    assert _reactor is reactor
                    assert fd is synchronizer.event_pipe.fileno()
                    assert eventmask is POLLIN
            finally:
                synchronizer.sync_from_main(callback=lambda : reactor.stop())
                assert reactor._reactor_state == REACTOR_STOPPED
                assert event_log[-1][-1] == META_REACTOR_SHUTDOWN_EV