Just removing the old 0.6.0 set of patches, Daniel
This commit is contained in:
parent
29b1292019
commit
a16d752c10
@ -1,21 +0,0 @@
|
|||||||
diff -rup libvirt-0.6.0.orig/src/remote_internal.c libvirt-0.6.0.new/src/remote_internal.c
|
|
||||||
--- libvirt-0.6.0.orig/src/remote_internal.c 2009-02-18 10:56:34.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/src/remote_internal.c 2009-02-18 13:35:26.000000000 +0000
|
|
||||||
@@ -654,12 +654,13 @@ doRemoteOpen (virConnectPtr conn,
|
|
||||||
*/
|
|
||||||
if (errno == ECONNREFUSED &&
|
|
||||||
flags & VIR_DRV_OPEN_REMOTE_AUTOSTART &&
|
|
||||||
- trials < 5) {
|
|
||||||
+ trials < 20) {
|
|
||||||
close(priv->sock);
|
|
||||||
priv->sock = -1;
|
|
||||||
- if (remoteForkDaemon(conn) == 0) {
|
|
||||||
+ if (trials > 0 ||
|
|
||||||
+ remoteForkDaemon(conn) == 0) {
|
|
||||||
trials++;
|
|
||||||
- usleep(5000 * trials * trials);
|
|
||||||
+ usleep(1000 * 100 * trials);
|
|
||||||
goto autostart_retry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Only in libvirt-0.6.0.new/src: remote_internal.c~
|
|
@ -1,44 +0,0 @@
|
|||||||
diff -rup libvirt-0.6.0.orig/qemud/qemud.c libvirt-0.6.0.new/qemud/qemud.c
|
|
||||||
--- libvirt-0.6.0.orig/qemud/qemud.c 2009-02-18 10:56:34.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/qemud/qemud.c 2009-02-18 12:52:18.000000000 +0000
|
|
||||||
@@ -860,6 +860,10 @@ static struct qemud_server *qemudNetwork
|
|
||||||
if (auth_unix_rw == REMOTE_AUTH_POLKIT ||
|
|
||||||
auth_unix_ro == REMOTE_AUTH_POLKIT) {
|
|
||||||
DBusError derr;
|
|
||||||
+
|
|
||||||
+ dbus_connection_set_change_sigpipe(FALSE);
|
|
||||||
+ dbus_threads_init_default();
|
|
||||||
+
|
|
||||||
dbus_error_init(&derr);
|
|
||||||
server->sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &derr);
|
|
||||||
if (!(server->sysbus)) {
|
|
||||||
@@ -868,6 +872,7 @@ static struct qemud_server *qemudNetwork
|
|
||||||
dbus_error_free(&derr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
+ dbus_connection_set_exit_on_disconnect(server->sysbus, FALSE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
diff -rup libvirt-0.6.0.orig/src/node_device_hal.c libvirt-0.6.0.new/src/node_device_hal.c
|
|
||||||
--- libvirt-0.6.0.orig/src/node_device_hal.c 2009-01-16 12:44:22.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/src/node_device_hal.c 2009-02-18 12:52:48.000000000 +0000
|
|
||||||
@@ -685,6 +685,9 @@ static int halDeviceMonitorStartup(void)
|
|
||||||
nodeDeviceLock(driverState);
|
|
||||||
|
|
||||||
/* Allocate and initialize a new HAL context */
|
|
||||||
+ dbus_connection_set_change_sigpipe(FALSE);
|
|
||||||
+ dbus_threads_init_default();
|
|
||||||
+
|
|
||||||
dbus_error_init(&err);
|
|
||||||
hal_ctx = libhal_ctx_new();
|
|
||||||
if (hal_ctx == NULL) {
|
|
||||||
@@ -696,6 +699,8 @@ static int halDeviceMonitorStartup(void)
|
|
||||||
fprintf(stderr, "%s: dbus_bus_get failed\n", __FUNCTION__);
|
|
||||||
goto failure;
|
|
||||||
}
|
|
||||||
+ dbus_connection_set_exit_on_disconnect(dbus_conn, FALSE);
|
|
||||||
+
|
|
||||||
if (!libhal_ctx_set_dbus_connection(hal_ctx, dbus_conn)) {
|
|
||||||
fprintf(stderr, "%s: libhal_ctx_set_dbus_connection failed\n",
|
|
||||||
__FUNCTION__);
|
|
@ -1,109 +0,0 @@
|
|||||||
diff -rup libvirt-0.6.0.orig/src/qemu_driver.c libvirt-0.6.0.new/src/qemu_driver.c
|
|
||||||
--- libvirt-0.6.0.orig/src/qemu_driver.c 2009-01-31 09:04:18.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/src/qemu_driver.c 2009-02-18 11:15:37.000000000 +0000
|
|
||||||
@@ -633,6 +633,7 @@ qemudReadMonitorOutput(virConnectPtr con
|
|
||||||
{
|
|
||||||
int got = 0;
|
|
||||||
buf[0] = '\0';
|
|
||||||
+ timeout *= 1000; /* poll wants milli seconds */
|
|
||||||
|
|
||||||
/* Consume & discard the initial greeting */
|
|
||||||
while (got < (buflen-1)) {
|
|
||||||
@@ -694,6 +695,56 @@ qemudReadMonitorOutput(virConnectPtr con
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Returns -1 for error, 0 on success
|
|
||||||
+ */
|
|
||||||
+static int
|
|
||||||
+qemudReadLogOutput(virConnectPtr conn,
|
|
||||||
+ virDomainObjPtr vm,
|
|
||||||
+ int fd,
|
|
||||||
+ char *buf,
|
|
||||||
+ int buflen,
|
|
||||||
+ qemudHandlerMonitorOutput func,
|
|
||||||
+ const char *what,
|
|
||||||
+ int timeout)
|
|
||||||
+{
|
|
||||||
+ int got = 0;
|
|
||||||
+ int ret;
|
|
||||||
+ int retries = timeout*10;
|
|
||||||
+ buf[0] = '\0';
|
|
||||||
+
|
|
||||||
+ while (retries) {
|
|
||||||
+ while((ret = read(fd, buf+got, buflen-got-1)) > 0) {
|
|
||||||
+ got += ret;
|
|
||||||
+ buf[got] = '\0';
|
|
||||||
+ if ((buflen-got-1) == 0) {
|
|
||||||
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
+ _("Out of space while reading %s log output"), what);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (ret < 0 && errno != EINTR) {
|
|
||||||
+ virReportSystemError(conn, errno,
|
|
||||||
+ _("Failure while reading %s log output"),
|
|
||||||
+ what);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ret = func(conn, vm, buf, fd);
|
|
||||||
+ if (ret <= 0)
|
|
||||||
+ return ret;
|
|
||||||
+
|
|
||||||
+ usleep(100*1000);
|
|
||||||
+ retries--;
|
|
||||||
+ }
|
|
||||||
+ if (retries == 0)
|
|
||||||
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
+ _("Timed out while reading %s log output"), what);
|
|
||||||
+ return -1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int
|
|
||||||
qemudCheckMonitorPrompt(virConnectPtr conn ATTRIBUTE_UNUSED,
|
|
||||||
virDomainObjPtr vm,
|
|
||||||
@@ -738,7 +789,7 @@ static int qemudOpenMonitor(virConnectPt
|
|
||||||
vm, monfd,
|
|
||||||
buf, sizeof(buf),
|
|
||||||
qemudCheckMonitorPrompt,
|
|
||||||
- "monitor", 10000) <= 0)
|
|
||||||
+ "monitor", 10) <= 0)
|
|
||||||
ret = -1;
|
|
||||||
else
|
|
||||||
ret = 0;
|
|
||||||
@@ -770,6 +821,7 @@ static int qemudOpenMonitor(virConnectPt
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Returns -1 for error, 0 success, 1 continue reading */
|
|
||||||
static int qemudExtractMonitorPath(virConnectPtr conn,
|
|
||||||
const char *haystack,
|
|
||||||
size_t *offset,
|
|
||||||
@@ -873,19 +925,16 @@ static int qemudWaitForMonitor(virConnec
|
|
||||||
< 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
- ret = qemudReadMonitorOutput(conn, vm, logfd, buf, sizeof(buf),
|
|
||||||
- qemudFindCharDevicePTYs,
|
|
||||||
- "console", 3000);
|
|
||||||
+ ret = qemudReadLogOutput(conn, vm, logfd, buf, sizeof(buf),
|
|
||||||
+ qemudFindCharDevicePTYs,
|
|
||||||
+ "console", 3);
|
|
||||||
if (close(logfd) < 0)
|
|
||||||
qemudLog(QEMUD_WARN, _("Unable to close logfile: %s\n"),
|
|
||||||
strerror(errno));
|
|
||||||
|
|
||||||
- if (ret == 1) /* Success */
|
|
||||||
+ if (ret == 0) /* success */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- if (ret == -1)
|
|
||||||
- return -1;
|
|
||||||
-
|
|
||||||
/* Unexpected end of file - inform user of QEMU log data */
|
|
||||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("unable to start guest: %s"), buf);
|
|
@ -1,70 +0,0 @@
|
|||||||
diff -rup libvirt-0.6.0.orig/qemud/event.c libvirt-0.6.0.new/qemud/event.c
|
|
||||||
--- libvirt-0.6.0.orig/qemud/event.c 2009-02-06 19:30:58.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/qemud/event.c 2009-02-06 19:30:00.000000000 +0000
|
|
||||||
@@ -657,6 +657,8 @@ virPollEventToEventHandleType(int events
|
|
||||||
ret |= VIR_EVENT_HANDLE_WRITABLE;
|
|
||||||
if(events & POLLERR)
|
|
||||||
ret |= VIR_EVENT_HANDLE_ERROR;
|
|
||||||
+ if(events & POLLNVAL) /* Treat NVAL as error, since libvirt doesn't distinguish */
|
|
||||||
+ ret |= VIR_EVENT_HANDLE_ERROR;
|
|
||||||
if(events & POLLHUP)
|
|
||||||
ret |= VIR_EVENT_HANDLE_HANGUP;
|
|
||||||
return ret;
|
|
||||||
diff -rup libvirt-0.6.0.orig/src/domain_conf.c libvirt-0.6.0.new/src/domain_conf.c
|
|
||||||
--- libvirt-0.6.0.orig/src/domain_conf.c 2009-01-31 09:04:17.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/src/domain_conf.c 2009-02-06 19:30:00.000000000 +0000
|
|
||||||
@@ -504,6 +504,7 @@ virDomainObjPtr virDomainAssignDef(virCo
|
|
||||||
domain->state = VIR_DOMAIN_SHUTOFF;
|
|
||||||
domain->def = def;
|
|
||||||
domain->monitor_watch = -1;
|
|
||||||
+ domain->monitor = -1;
|
|
||||||
|
|
||||||
if (VIR_REALLOC_N(doms->objs, doms->count + 1) < 0) {
|
|
||||||
virReportOOMError(conn);
|
|
||||||
diff -rup libvirt-0.6.0.orig/src/remote_internal.c libvirt-0.6.0.new/src/remote_internal.c
|
|
||||||
--- libvirt-0.6.0.orig/src/remote_internal.c 2009-01-31 09:04:18.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/src/remote_internal.c 2009-02-06 19:30:00.000000000 +0000
|
|
||||||
@@ -6198,17 +6198,17 @@ processCalls(virConnectPtr conn,
|
|
||||||
continue;
|
|
||||||
virReportSystemError(in_open ? NULL : conn, errno,
|
|
||||||
"%s", _("poll on socket failed"));
|
|
||||||
- return -1;
|
|
||||||
+ goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fds[0].revents & POLLOUT) {
|
|
||||||
if (processCallSend(conn, priv, in_open) < 0)
|
|
||||||
- return -1;
|
|
||||||
+ goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fds[0].revents & POLLIN) {
|
|
||||||
if (processCallRecv(conn, priv, in_open) < 0)
|
|
||||||
- return -1;
|
|
||||||
+ goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Iterate through waiting threads and if
|
|
||||||
@@ -6259,9 +6259,21 @@ processCalls(virConnectPtr conn,
|
|
||||||
if (fds[0].revents & (POLLHUP | POLLERR)) {
|
|
||||||
errorf(in_open ? NULL : conn, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
"%s", _("received hangup / error event on socket"));
|
|
||||||
- return -1;
|
|
||||||
+ goto error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+error:
|
|
||||||
+ priv->waitDispatch = thiscall->next;
|
|
||||||
+ DEBUG("Giving up the buck due to I/O error %d %p %p", thiscall->proc_nr, thiscall, priv->waitDispatch);
|
|
||||||
+ /* See if someone else is still waiting
|
|
||||||
+ * and if so, then pass the buck ! */
|
|
||||||
+ if (priv->waitDispatch) {
|
|
||||||
+ DEBUG("Passing the buck to %d %p", priv->waitDispatch->proc_nr, priv->waitDispatch);
|
|
||||||
+ virCondSignal(&priv->waitDispatch->cond);
|
|
||||||
+ }
|
|
||||||
+ return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
@ -1,124 +0,0 @@
|
|||||||
diff -rup libvirt-0.6.0.orig/qemud/event.c libvirt-0.6.0.new/qemud/event.c
|
|
||||||
--- libvirt-0.6.0.orig/qemud/event.c 2008-12-22 13:02:54.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/qemud/event.c 2009-02-06 19:29:28.000000000 +0000
|
|
||||||
@@ -68,6 +68,7 @@ struct virEventTimeout {
|
|
||||||
/* State for the main event loop */
|
|
||||||
struct virEventLoop {
|
|
||||||
pthread_mutex_t lock;
|
|
||||||
+ int running;
|
|
||||||
pthread_t leader;
|
|
||||||
int wakeupfd[2];
|
|
||||||
int handlesCount;
|
|
||||||
@@ -521,6 +522,7 @@ int virEventRunOnce(void) {
|
|
||||||
int ret, timeout, nfds;
|
|
||||||
|
|
||||||
virEventLock();
|
|
||||||
+ eventLoop.running = 1;
|
|
||||||
eventLoop.leader = pthread_self();
|
|
||||||
if ((nfds = virEventMakePollFDs(&fds)) < 0) {
|
|
||||||
virEventUnlock();
|
|
||||||
@@ -572,7 +574,7 @@ int virEventRunOnce(void) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- eventLoop.leader = 0;
|
|
||||||
+ eventLoop.running = 0;
|
|
||||||
virEventUnlock();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -611,7 +613,9 @@ int virEventInit(void)
|
|
||||||
static int virEventInterruptLocked(void)
|
|
||||||
{
|
|
||||||
char c = '\0';
|
|
||||||
- if (pthread_self() == eventLoop.leader)
|
|
||||||
+
|
|
||||||
+ if (!eventLoop.running ||
|
|
||||||
+ pthread_self() == eventLoop.leader)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (safewrite(eventLoop.wakeupfd[1], &c, sizeof(c)) != sizeof(c))
|
|
||||||
diff -rup libvirt-0.6.0.orig/qemud/qemud.c libvirt-0.6.0.new/qemud/qemud.c
|
|
||||||
--- libvirt-0.6.0.orig/qemud/qemud.c 2009-01-31 09:04:17.000000000 +0000
|
|
||||||
+++ libvirt-0.6.0.new/qemud/qemud.c 2009-02-06 19:29:28.000000000 +0000
|
|
||||||
@@ -2013,11 +2013,15 @@ static int qemudOneLoop(void) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void qemudInactiveTimer(int timer ATTRIBUTE_UNUSED, void *data) {
|
|
||||||
+static void qemudInactiveTimer(int timerid, void *data) {
|
|
||||||
struct qemud_server *server = (struct qemud_server *)data;
|
|
||||||
- DEBUG0("Got inactive timer expiry");
|
|
||||||
- if (!virStateActive()) {
|
|
||||||
- DEBUG0("No state active, shutting down");
|
|
||||||
+
|
|
||||||
+ if (virStateActive() ||
|
|
||||||
+ server->clients) {
|
|
||||||
+ DEBUG0("Timer expired but still active, not shutting down");
|
|
||||||
+ virEventUpdateTimeoutImpl(timerid, -1);
|
|
||||||
+ } else {
|
|
||||||
+ DEBUG0("Timer expired and inactive, shutting down");
|
|
||||||
server->shutdown = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2048,9 +2052,18 @@ static void qemudFreeClient(struct qemud
|
|
||||||
static int qemudRunLoop(struct qemud_server *server) {
|
|
||||||
int timerid = -1;
|
|
||||||
int ret = -1, i;
|
|
||||||
+ int timerActive = 0;
|
|
||||||
|
|
||||||
virMutexLock(&server->lock);
|
|
||||||
|
|
||||||
+ if (timeout > 0 &&
|
|
||||||
+ (timerid = virEventAddTimeoutImpl(-1,
|
|
||||||
+ qemudInactiveTimer,
|
|
||||||
+ server, NULL)) < 0) {
|
|
||||||
+ VIR_ERROR0(_("Failed to register shutdown timeout"));
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (min_workers > max_workers)
|
|
||||||
max_workers = min_workers;
|
|
||||||
|
|
||||||
@@ -2071,11 +2084,21 @@ static int qemudRunLoop(struct qemud_ser
|
|
||||||
* if any drivers have active state, if not
|
|
||||||
* shutdown after timeout seconds
|
|
||||||
*/
|
|
||||||
- if (timeout > 0 && !virStateActive() && !server->clients) {
|
|
||||||
- timerid = virEventAddTimeoutImpl(timeout*1000,
|
|
||||||
- qemudInactiveTimer,
|
|
||||||
- server, NULL);
|
|
||||||
- DEBUG("Scheduling shutdown timer %d", timerid);
|
|
||||||
+ if (timeout > 0) {
|
|
||||||
+ if (timerActive) {
|
|
||||||
+ if (server->clients) {
|
|
||||||
+ DEBUG("Deactivating shutdown timer %d", timerid);
|
|
||||||
+ virEventUpdateTimeoutImpl(timerid, -1);
|
|
||||||
+ timerActive = 0;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ if (!virStateActive() &&
|
|
||||||
+ !server->clients) {
|
|
||||||
+ DEBUG("Activating shutdown timer %d", timerid);
|
|
||||||
+ virEventUpdateTimeoutImpl(timerid, timeout * 1000);
|
|
||||||
+ timerActive = 1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
virMutexUnlock(&server->lock);
|
|
||||||
@@ -2129,15 +2152,6 @@ static int qemudRunLoop(struct qemud_ser
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Unregister any timeout that's active, since we
|
|
||||||
- * just had an event processed
|
|
||||||
- */
|
|
||||||
- if (timerid != -1) {
|
|
||||||
- DEBUG("Removing shutdown timer %d", timerid);
|
|
||||||
- virEventRemoveTimeoutImpl(timerid);
|
|
||||||
- timerid = -1;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
if (server->shutdown) {
|
|
||||||
ret = 0;
|
|
||||||
break;
|
|
Loading…
Reference in New Issue
Block a user