diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index 4746897def58eb11c25ff9865983fc00eb9a2504..aec2d4ccd356908c529ab24fd7276805a77eac8d 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -97,6 +97,8 @@ struct _virLXCControllerConsole {
     char fromHostBuf[1024];
     size_t fromContLen;
     char fromContBuf[1024];
+
+    virNetServerPtr server;
 };
 
 typedef struct _virLXCController virLXCController;
@@ -278,6 +280,7 @@ static int virLXCControllerAddConsole(virLXCControllerPtr ctrl,
         virReportOOMError();
         return -1;
     }
+    ctrl->consoles[ctrl->nconsoles-1].server = ctrl->server;
     ctrl->consoles[ctrl->nconsoles-1].hostFd = hostFd;
     ctrl->consoles[ctrl->nconsoles-1].hostWatch = -1;
 
@@ -663,12 +666,11 @@ static int lxcControllerClearCapabilities(void)
     return 0;
 }
 
-static bool quit = false;
 static bool wantReboot = false;
 static virMutex lock;
 
 
-static void virLXCControllerSignalChildIO(virNetServerPtr server ATTRIBUTE_UNUSED,
+static void virLXCControllerSignalChildIO(virNetServerPtr server,
                                           siginfo_t *info ATTRIBUTE_UNUSED,
                                           void *opaque)
 {
@@ -678,8 +680,8 @@ static void virLXCControllerSignalChildIO(virNetServerPtr server ATTRIBUTE_UNUSE
 
     ret = waitpid(-1, &status, WNOHANG);
     if (ret == ctrl->initpid) {
+        virNetServerQuit(server);
         virMutexLock(&lock);
-        quit = true;
         if (WIFSIGNALED(status) &&
             WTERMSIG(status) == SIGHUP)
             wantReboot = true;
@@ -731,7 +733,7 @@ static void virLXCControllerConsoleUpdateWatch(virLXCControllerConsolePtr consol
                 VIR_DEBUG(":fail");
                 virReportSystemError(errno, "%s",
                                      _("Unable to add epoll fd"));
-                quit = true;
+                virNetServerQuit(console->server);
                 goto cleanup;
             }
             console->hostEpoll = events;
@@ -742,8 +744,8 @@ static void virLXCControllerConsoleUpdateWatch(virLXCControllerConsolePtr consol
         if (epoll_ctl(console->epollFd, EPOLL_CTL_DEL, console->hostFd, NULL) < 0) {
             virReportSystemError(errno, "%s",
                                  _("Unable to remove epoll fd"));
-                VIR_DEBUG(":fail");
-            quit = true;
+            VIR_DEBUG(":fail");
+            virNetServerQuit(console->server);
             goto cleanup;
         }
         console->hostEpoll = 0;
@@ -768,7 +770,7 @@ static void virLXCControllerConsoleUpdateWatch(virLXCControllerConsolePtr consol
                 virReportSystemError(errno, "%s",
                                      _("Unable to add epoll fd"));
                 VIR_DEBUG(":fail");
-                quit = true;
+                virNetServerQuit(console->server);
                 goto cleanup;
             }
             console->contEpoll = events;
@@ -779,8 +781,8 @@ static void virLXCControllerConsoleUpdateWatch(virLXCControllerConsolePtr consol
         if (epoll_ctl(console->epollFd, EPOLL_CTL_DEL, console->contFd, NULL) < 0) {
             virReportSystemError(errno, "%s",
                                  _("Unable to remove epoll fd"));
-                VIR_DEBUG(":fail");
-            quit = true;
+            VIR_DEBUG(":fail");
+            virNetServerQuit(console->server);
             goto cleanup;
         }
         console->contEpoll = 0;
@@ -809,7 +811,7 @@ static void virLXCControllerConsoleEPoll(int watch, int fd, int events, void *op
                 continue;
             virReportSystemError(errno, "%s",
                                  _("Unable to wait on epoll"));
-            quit = true;
+            virNetServerQuit(console->server);
             goto cleanup;
         }
 
@@ -926,7 +928,7 @@ error:
     virEventRemoveHandle(console->contWatch);
     virEventRemoveHandle(console->hostWatch);
     console->contWatch = console->hostWatch = -1;
-    quit = true;
+    virNetServerQuit(console->server);
     virMutexUnlock(&lock);
 }
 
@@ -995,14 +997,7 @@ static int virLXCControllerMain(virLXCControllerPtr ctrl)
         }
     }
 
-    virMutexLock(&lock);
-    while (!quit) {
-        virMutexUnlock(&lock);
-        if (virEventRunDefaultImpl() < 0)
-            goto cleanup;
-        virMutexLock(&lock);
-    }
-    virMutexUnlock(&lock);
+    virNetServerRun(ctrl->server);
 
     err = virGetLastError();
     if (!err || err->code == VIR_ERR_OK)