From: Daniel P. Berrange Date: Thu, 21 Jul 2011 17:23:21 +0000 (+0100) Subject: Ensure that libvirtd shuts down if initialization fails X-Git-Tag: v0.9.4-rc1~43 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=92509413e2da3260b99177de82c85a59cf8ddfd9;p=thirdparty%2Flibvirt.git Ensure that libvirtd shuts down if initialization fails 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 --- diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index 38876d84d9..f2f3a4eaf7 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -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; } diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c index 731932c2ae..bc7b476dcf 100644 --- a/src/rpc/virnetserver.c +++ b/src/rpc/virnetserver.c @@ -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);