summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/vnc/vncserver.cc5
-rw-r--r--src/dev/ethertap.cc5
-rw-r--r--src/dev/terminal.cc5
3 files changed, 15 insertions, 0 deletions
diff --git a/src/base/vnc/vncserver.cc b/src/base/vnc/vncserver.cc
index debf82014..9ca575915 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -174,6 +174,11 @@ VncServer::listen(int port)
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 --git a/src/dev/ethertap.cc b/src/dev/ethertap.cc
index 94e381a8e..e14fd90c2 100644
--- a/src/dev/ethertap.cc
+++ b/src/dev/ethertap.cc
@@ -106,6 +106,11 @@ TapListener::listen()
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 --git a/src/dev/terminal.cc b/src/dev/terminal.cc
index a11d45554..e70a8775f 100644
--- a/src/dev/terminal.cc
+++ b/src/dev/terminal.cc
@@ -84,6 +84,11 @@ Terminal::DataEvent::DataEvent(Terminal *t, int fd, int e)
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)