diff -r 936a3a8006f6 -r 4a788c919b4e src/base/vnc/vncserver.cc --- a/src/base/vnc/vncserver.cc Thu Apr 03 11:22:49 2014 +0200 +++ b/src/base/vnc/vncserver.cc Thu Apr 03 14:26:02 2014 +0200 @@ -174,6 +174,11 @@ void VncServer::accept() { + // As a consequence of being called from the PollQueue, we might + // have been called from a different thread. Migrate to "our" + // thread. + EventQueue::ScopedMigration migrate(eventQueue()); + if (!listener.islistening()) panic("%s: cannot accept a connection if not listening!", name()); diff -r 936a3a8006f6 -r 4a788c919b4e src/dev/ethertap.cc --- a/src/dev/ethertap.cc Thu Apr 03 11:22:49 2014 +0200 +++ b/src/dev/ethertap.cc Thu Apr 03 14:26:02 2014 +0200 @@ -106,6 +106,11 @@ void TapListener::accept() { + // As a consequence of being called from the PollQueue, we might + // have been called from a different thread. Migrate to "our" + // thread. + EventQueue::ScopedMigration migrate(tap->eventQueue()); + if (!listener.islistening()) panic("TapListener(accept): cannot accept if we're not listening!"); diff -r 936a3a8006f6 -r 4a788c919b4e src/dev/terminal.cc --- a/src/dev/terminal.cc Thu Apr 03 11:22:49 2014 +0200 +++ b/src/dev/terminal.cc Thu Apr 03 14:26:02 2014 +0200 @@ -84,6 +84,11 @@ void Terminal::DataEvent::process(int revent) { + // As a consequence of being called from the PollQueue, we might + // have been called from a different thread. Migrate to "our" + // thread. + EventQueue::ScopedMigration migrate(term->eventQueue()); + if (revent & POLLIN) term->data(); else if (revent & POLLNVAL)