]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Ensure that libvirtd shuts down if initialization fails
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 21 Jul 2011 17:23:21 +0000 (18:23 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Fri, 22 Jul 2011 10:39:39 +0000 (11:39 +0100)
If the virStateInitialize call fails we must shutdown libvirtd
since drivers will not be available. Just free'ing the virNetServer
is not sufficient, we must send a SIGTERM to ourselves so that
we interrupt the event loop and trigger a orderly shutdown

* daemon/libvirtd.c: Kill ourselves if state init fails
* src/rpc/virnetserver.c: Add some debugging to event loop

daemon/libvirtd.c
src/rpc/virnetserver.c

index 38876d84d9a2716cbb739b445dfddb1c4cbe1065..f2f3a4eaf7a2f6792aa61a28c2451723d9dbadd7 100644 (file)
@@ -1156,6 +1156,8 @@ static void daemonRunStateInit(void *opaque)
      * seriously delay OS bootup process */
     if (virStateInitialize(virNetServerIsPrivileged(srv)) < 0) {
         VIR_ERROR(_("Driver state initialization failed"));
+        /* Ensure the main event loop quits */
+        kill(getpid(), SIGTERM);
         virNetServerFree(srv);
         return;
     }
index 731932c2aee913b266b0c09a7cf3d1e5814b4ea8..bc7b476dcf7e083d79597e8f7414182a92914725 100644 (file)
@@ -671,6 +671,7 @@ void virNetServerRun(virNetServerPtr srv)
         goto cleanup;
     }
 
+    VIR_DEBUG("srv=%p quit=%d", srv, srv->quit);
     while (!srv->quit) {
         /* A shutdown timeout is specified, so check
          * if any drivers have active state, if not
@@ -731,6 +732,7 @@ void virNetServerQuit(virNetServerPtr srv)
 {
     virNetServerLock(srv);
 
+    VIR_DEBUG("Quit requested %p", srv);
     srv->quit = 1;
 
     virNetServerUnlock(srv);