[libvirt] PATCH: 0/28: Thread safety for libvirtd daemon and drivers
Daniel P. Berrange
berrange at redhat.com
Wed Dec 3 18:52:32 UTC 2008
On Wed, Dec 03, 2008 at 04:18:21PM +0100, Daniel Veillard wrote:
> On Mon, Dec 01, 2008 at 12:26:48AM +0000, Daniel P. Berrange wrote:
> > This is a diffstat summary for the combined series of 28 patches
>
> Okay, my take at this point is that those should be commited with
> the few fix found my manual examination, maybe extend the documentation
> a bit, and start testing it as much as prossible.
> Some locking debug facility might be a good addition,
I wrote some an OCaml program using CIL to check driver method exit paths
and validate that all objects were left in an unlocked state. This found
some real bugs !
So here's the incremental fixes for those
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -2128,7 +2128,7 @@ static int qemudDomainSave(virDomainPtr
if (safewrite(fd, &header, sizeof(header)) != sizeof(header)) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("failed to write save header"));
- return -1;
+ goto cleanup;
}
if (safewrite(fd, xml, header.xml_len) != header.xml_len) {
diff --git a/src/test.c b/src/test.c
--- a/src/test.c
+++ b/src/test.c
@@ -2393,7 +2393,7 @@ testStoragePoolCreate(virConnectPtr conn
}
if (!(pool = virStoragePoolObjAssignDef(conn, &privconn->pools, def))) {
- return NULL;
+ goto cleanup;
}
def = NULL;
diff --git a/src/uml_driver.c b/src/uml_driver.c
--- a/src/uml_driver.c
+++ b/src/uml_driver.c
@@ -251,6 +251,7 @@ reread:
if (e->mask & IN_DELETE) {
if (!virDomainIsActive(dom)) {
+ virDomainObjUnlock(dom);
continue;
}
@@ -263,10 +264,12 @@ reread:
dom->state = VIR_DOMAIN_SHUTOFF;
} else if (e->mask & (IN_CREATE | IN_MODIFY)) {
if (virDomainIsActive(dom)) {
+ virDomainObjUnlock(dom);
continue;
}
if (umlReadPidFile(NULL, driver, dom) < 0) {
+ virDomainObjUnlock(dom);
continue;
}
@@ -279,6 +282,7 @@ reread:
if (umlIdentifyChrPTY(NULL, driver, dom) < 0)
umlShutdownVMDaemon(NULL, driver, dom);
}
+ virDomainObjUnlock(dom);
}
}
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list