Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 31970c6c2a | |||
| 131bf1e834 | |||
| 0da9851d5d | |||
| 257e13d238 | |||
| 016a6dcd0e | |||
| b610e1c718 | |||
| caa81cd8d7 | |||
| eca45f4a3f | |||
| d475deef60 | |||
| 2a3935580c | |||
| 28f7f11450 | |||
| ca07bc4597 | |||
| 8e23194a2b | |||
| fe09090e2d | |||
| b5868cf8cf | |||
| f294b40ba5 | |||
| c0c1a7bb79 | |||
| 1b864048bd | |||
| 072c9c45ab | |||
| af111679c3 | |||
| dd9f21eaa2 | |||
| f0e356df98 | |||
| 140bcf9ffc | |||
| af69660412 | |||
| 6dc94c6252 | |||
| eb34165670 | |||
| 7ce08f2148 | |||
| 049a8c79d9 | |||
| f7a6d90012 | |||
| 67a2f29a89 | |||
| 82422fa1ff | |||
| a73cf1d010 |
+1
-1
@@ -3,4 +3,4 @@
|
||||
i686
|
||||
x86_64
|
||||
libvirt-*.tar.gz
|
||||
libvirt-0.4.2.tar.gz
|
||||
libvirt-0.4.6.tar.gz
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
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~
|
||||
@@ -0,0 +1,44 @@
|
||||
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__);
|
||||
@@ -0,0 +1,109 @@
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
+43
-23
@@ -47,12 +47,15 @@
|
||||
Summary: Library providing a simple API virtualization
|
||||
Name: libvirt
|
||||
Version: 0.6.0
|
||||
Release: 2%{?dist}%{?extra_release}
|
||||
Release: 3%{?dist}%{?extra_release}
|
||||
License: LGPLv2+
|
||||
Group: Development/Libraries
|
||||
Source: libvirt-%{version}.tar.gz
|
||||
Patch1: %{name}-%{version}-timeout.patch
|
||||
Patch2: %{name}-%{version}-rpccall.patch
|
||||
Patch2: %{name}-%{version}-rpccall2.patch
|
||||
Patch3: %{name}-%{version}-qemu-startup.patch
|
||||
Patch4: %{name}-%{version}-dbus-threads.patch
|
||||
Patch5: %{name}-%{version}-autostart-timeout.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||
URL: http://libvirt.org/
|
||||
BuildRequires: python python-devel
|
||||
@@ -181,6 +184,9 @@ of recent versions of Linux (and other OSes).
|
||||
%setup -q
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
|
||||
%build
|
||||
%if ! %{with_xen}
|
||||
@@ -463,12 +469,17 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Fri Feb 6 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-2.fc9
|
||||
* Wed Feb 18 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-3.fc10
|
||||
- Fix QEMU startup timeout/race (rhbz #484649)
|
||||
- Setup DBus threading. Don't allow dbus to call _exit / change SIGPIPE (rhbz #484553)
|
||||
- Fix timeout when autostarting session daemon
|
||||
|
||||
* Fri Feb 6 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-2.fc10
|
||||
- Fix libvirtd --timeout usage
|
||||
- Fix RPC call problems and QEMU startup handling (rhbz #484414)
|
||||
- Fix unowned directories (rhbz #483442)
|
||||
|
||||
* Sat Jan 31 2009 Daniel Veillard <veillard@redhat.com> - 0.6.0-1.fc9
|
||||
* Sat Jan 31 2009 Daniel Veillard <veillard@redhat.com> - 0.6.0-1.fc10
|
||||
- upstream release 0.6.0
|
||||
- thread safety of API
|
||||
- allow QEmu/KVM domains to survive daemon restart
|
||||
@@ -477,60 +488,69 @@ fi
|
||||
- support of storage cache control options for QEmu/KVM
|
||||
- a lot of bug fixes
|
||||
|
||||
* Wed Dec 17 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-2.fc9
|
||||
* Wed Dec 17 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-2.fc10
|
||||
- fix missing read-only access checks, fixes CVE-2008-5086
|
||||
|
||||
* Fri Dec 5 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-1.fc9
|
||||
* Fri Dec 5 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-1.fc10
|
||||
- upstream release 0.5.1
|
||||
- mostly bugfixes e.g #473071
|
||||
- some driver improvments
|
||||
|
||||
* Wed Nov 26 2008 Daniel Veillard <veillard@redhat.com> - 0.5.0-1.fc9
|
||||
* Wed Nov 26 2008 Daniel Veillard <veillard@redhat.com> - 0.5.0-1.fc10
|
||||
- upstream release 0.5.0
|
||||
- domain lifecycle event support
|
||||
- node device enumeration
|
||||
- KVM/QEmu migration support
|
||||
- improved LXC support
|
||||
- SDL display configuration
|
||||
- User Mode Linux driver
|
||||
- User Mode Linux driver (Daniel Berrange)
|
||||
|
||||
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-2.fc9
|
||||
- a subtle bug in python submakefile broke the 0.4.6-1.fc9 build #463733
|
||||
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-3.fc10
|
||||
- apply the python makefile patch for #463733
|
||||
|
||||
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-1.fc9
|
||||
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-2.fc10
|
||||
- upstream release 0.4.6
|
||||
- fixes a couple of serious bugs in the previous release
|
||||
- fixes some problems with 0.4.5
|
||||
|
||||
* Tue Sep 9 2008 Daniel Veillard <veillard@redhat.com> - 0.4.5-2.fc9
|
||||
* Tue Sep 9 2008 Daniel Veillard <veillard@redhat.com> - 0.4.5-2.fc10
|
||||
- fix a crash if a QEmu/KVM domain is defined without an emulator path
|
||||
|
||||
* Mon Sep 8 2008 Daniel Veillard <veillard@redhat.com> - 0.4.5-1.fc9
|
||||
* Mon Sep 8 2008 Daniel Veillard <veillard@redhat.com> - 0.4.5-1.fc10
|
||||
- upstream release 0.4.5
|
||||
- a lot of bug fixes
|
||||
- major updates to QEmu/KVM and Linux containers drivers
|
||||
- support for OpenVZ if installed
|
||||
|
||||
* Tue Jul 8 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.4-2.fc9
|
||||
* Thu Aug 7 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.4.4-3.fc10
|
||||
- fix license tag
|
||||
|
||||
* Tue Jul 8 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.4-2.fc10
|
||||
- Fix booting of CDROM images with KVM (rhbz #452355)
|
||||
|
||||
* Thu Jun 25 2008 Daniel Veillard <veillard@redhat.com> - 0.4.4-1.fc9
|
||||
- upstream release of 0.4.4
|
||||
- fixes a few bug in previous release
|
||||
* Wed Jun 25 2008 Daniel Veillard <veillard@redhat.com> - 0.4.4-1.fc10
|
||||
- upstream release 0.4.4
|
||||
- fix a few bugs in previous release
|
||||
|
||||
* Thu Jun 12 2008 Daniel Veillard <veillard@redhat.com> - 0.4.3-1.fc9
|
||||
* Thu Jun 12 2008 Daniel Veillard <veillard@redhat.com> - 0.4.3-1.fc10
|
||||
- upstream release 0.4.3
|
||||
- many bug fixes
|
||||
- many small improvements
|
||||
- serious xenner fixes
|
||||
|
||||
* Wed Jun 4 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-4.fc9
|
||||
* Wed Jun 4 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-6.fc10
|
||||
- Disable lokkit support again (#449996, #447633)
|
||||
- Ensure PolicyKit is enabled (#446616)
|
||||
- Ensure %{fedora} is evaluated correctly
|
||||
|
||||
* Fri May 9 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-3.fc9
|
||||
* Thu May 15 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-5.fc10
|
||||
- Rebuild with policy enabled (rhbz #446616)
|
||||
|
||||
* Fri May 9 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-4.fc10
|
||||
- Added directory for initrd/kernel images for SELinux policy
|
||||
|
||||
* Mon Apr 28 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-2.fc9
|
||||
* Mon Apr 28 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-3.fc10
|
||||
- Simplify the way arch conditionals are handled
|
||||
|
||||
* Mon Apr 28 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-2.fc10
|
||||
- Enable lokkit support (#443796)
|
||||
|
||||
* Tue Apr 8 2008 Daniel Veillard <veillard@redhat.com> - 0.4.2-1.fc9
|
||||
|
||||
Reference in New Issue
Block a user