提交 2dd21783 编写于 作者: D Daniel P. Berrange

Move code dealing with global startup/shutdown/reload into driver.c

上级 9f25d22a
Tue Jun 26 16:41:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* 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 <berrange@redhat.com>
* qemud/driver.c, qemud/driver.h, qemud/internal.h,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册