From 2dd21783ec0c66b7cc8736f2d3c023854a9921dd Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 26 Jun 2007 20:45:21 +0000 Subject: [PATCH] Move code dealing with global startup/shutdown/reload into driver.c --- ChangeLog | 5 ++++ qemud/driver.c | 78 +++++++++++++++++++++++++++++++++----------------- qemud/driver.h | 2 ++ qemud/qemud.c | 45 ++--------------------------- 4 files changed, 61 insertions(+), 69 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3dec2d28fd..4c0bbe01a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Jun 26 16:41:00 EST 2007 Daniel P. Berrange + + * qemud/driver.c, qemud/driver.h, qemud/qemud.c: Move code + handling global startup, shutdown & reload into driver.c + Tue Jun 26 16:41:00 EST 2007 Daniel P. Berrange * qemud/driver.c, qemud/driver.h, qemud/internal.h, diff --git a/qemud/driver.c b/qemud/driver.c index 5f774d7be5..eea4de42d1 100644 --- a/qemud/driver.c +++ b/qemud/driver.c @@ -93,6 +93,19 @@ static int qemudSetNonBlock(int fd) { } +int qemudStartup(struct qemud_server *server) { + return qemudScanConfigs(server); +} + +void qemudReload(struct qemud_server *server) { + qemudScanConfigs(server); + + if (server->iptables) { + qemudLog(QEMUD_INFO, "Reloading iptables rules"); + iptablesReloadRules(server->iptables); + } +} + void qemudShutdown(struct qemud_server *server) { struct qemud_vm *vm; struct qemud_network *network; @@ -448,7 +461,7 @@ static int qemudNextFreeVNCPort(struct qemud_server *server ATTRIBUTE_UNUSED) { int qemudStartVMDaemon(struct qemud_server *server, struct qemud_vm *vm) { char **argv = NULL, **tmp; - int i, ret = -1; + int i; char logfile[PATH_MAX]; if (qemudIsActiveVM(vm)) { @@ -524,24 +537,12 @@ int qemudStartVMDaemon(struct qemud_server *server, server->ninactivevms--; server->nactivevms++; - - virEventAddHandle(vm->stdout, - POLLIN | POLLERR | POLLHUP, - qemudDispatchVMEvent, - server); - virEventAddHandle(vm->stderr, - POLLIN | POLLERR | POLLHUP, - qemudDispatchVMEvent, - server); - - ret = 0; - - if (qemudWaitForMonitor(server, vm) < 0) { - qemudShutdownVMDaemon(server, vm); - ret = -1; - } } + for (i = 0 ; argv[i] ; i++) + free(argv[i]); + free(argv); + if (vm->tapfds) { for (i = 0; vm->tapfds[i] != -1; i++) { close(vm->tapfds[i]); @@ -551,12 +552,30 @@ int qemudStartVMDaemon(struct qemud_server *server, vm->tapfds = NULL; vm->ntapfds = 0; } - - for (i = 0 ; argv[i] ; i++) - free(argv[i]); - free(argv); - return ret; + if (virEventAddHandle(vm->stdout, + POLLIN | POLLERR | POLLHUP, + qemudDispatchVMEvent, + server) < 0) { + qemudShutdownVMDaemon(server, vm); + return -1; + } + + if (virEventAddHandle(vm->stderr, + POLLIN | POLLERR | POLLHUP, + qemudDispatchVMEvent, + server) < 0) { + qemudShutdownVMDaemon(server, vm); + return -1; + } + + + if (qemudWaitForMonitor(server, vm) < 0) { + qemudShutdownVMDaemon(server, vm); + return -1; + } + + return 0; } static int qemudVMData(struct qemud_server *server ATTRIBUTE_UNUSED, @@ -634,6 +653,9 @@ int qemudShutdownVMDaemon(struct qemud_server *server, struct qemud_vm *vm) { server->nactivevms--; server->ninactivevms++; + if (!vm->configFile[0]) + qemudRemoveInactiveVM(server, vm); + return 0; } @@ -1096,6 +1118,9 @@ int qemudShutdownNetworkDaemon(struct qemud_server *server, server->nactivenetworks--; server->ninactivenetworks++; + if (!network->configFile[0]) + qemudRemoveInactiveNetwork(server, network); + return 0; } @@ -1116,11 +1141,10 @@ static void qemudDispatchVMEvent(int fd, int events, void *opaque) { if (!vm) return; - if (events == POLLIN && - qemudDispatchVMLog(server, vm, fd) == 0) - return; - - qemudDispatchVMFailure(server, vm, fd); + if (events == POLLIN) + qemudDispatchVMLog(server, vm, fd); + else + qemudDispatchVMFailure(server, vm, fd); } int qemudMonitorCommand(struct qemud_server *server ATTRIBUTE_UNUSED, diff --git a/qemud/driver.h b/qemud/driver.h index 803d606e74..06b9ae87d7 100644 --- a/qemud/driver.h +++ b/qemud/driver.h @@ -39,6 +39,8 @@ int qemudStartNetworkDaemon(struct qemud_server *server, int qemudShutdownNetworkDaemon(struct qemud_server *server, struct qemud_network *network); +int qemudStartup(struct qemud_server *server); +void qemudReload(struct qemud_server *server); void qemudShutdown(struct qemud_server *server); void qemudReportError(struct qemud_server *server, diff --git a/qemud/qemud.c b/qemud/qemud.c index 3b56a6d406..786a38dd98 100644 --- a/qemud/qemud.c +++ b/qemud/qemud.c @@ -57,8 +57,6 @@ #include "../src/remote_internal.h" #include "../src/conf.h" #include "dispatch.h" -#include "conf.h" -#include "iptables.h" #include "driver.h" #include "event.h" @@ -209,12 +207,7 @@ static void qemudDispatchSignalEvent(int fd ATTRIBUTE_UNUSED, case SIGHUP: qemudLog(QEMUD_INFO, "Reloading configuration on SIGHUP"); if (!remote) { - ret = qemudScanConfigs(server); - - if (server->iptables) { - qemudLog(QEMUD_INFO, "Reloading iptables rules"); - iptablesReloadRules(server->iptables); - } + qemudReload(server); } break; @@ -733,7 +726,7 @@ static struct qemud_server *qemudInitialize(int sigread) { goto cleanup; if (!remote) /* qemud only */ { - if (qemudScanConfigs(server) < 0) { + if (qemudStartup(server) < 0) { goto cleanup; } } else /* remote only */ { @@ -1491,37 +1484,7 @@ static void qemudDispatchServerEvent(int fd, int events, void *opaque) { } -static void qemudCleanupInactive(struct qemud_server *server) { - struct qemud_vm *vm = server->vms; - struct qemud_network *network = server->networks; - - /* Cleanup any VMs which shutdown & dont have an associated - config file */ - while (vm) { - struct qemud_vm *next = vm->next; - - if (!qemudIsActiveVM(vm) && !vm->configFile[0]) - qemudRemoveInactiveVM(server, vm); - - vm = next; - } - - /* Cleanup any networks too */ - while (network) { - struct qemud_network *next = network->next; - - if (!qemudIsActiveNetwork(network) && !network->configFile[0]) - qemudRemoveInactiveNetwork(server, network); - - network = next; - } - - return; -} - - - -static int qemudOneLoop(struct qemud_server *server) { +static int qemudOneLoop(struct qemud_server *server ATTRIBUTE_UNUSED) { sig_atomic_t errors; if (virEventRunOnce() < 0) @@ -1537,8 +1500,6 @@ static int qemudOneLoop(struct qemud_server *server) { return -1; } - qemudCleanupInactive(server); - return 0; }