]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
virDomainObjListFindByName: Return referenced object
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 23 Apr 2015 16:00:01 +0000 (18:00 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 24 Apr 2015 11:22:45 +0000 (13:22 +0200)
Every domain that grabs a domain object to work over should
reference it to make sure it won't disappear meanwhile.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/bhyve/bhyve_driver.c
src/conf/domain_conf.c
src/libxl/libxl_driver.c
src/lxc/lxc_driver.c
src/openvz/openvz_driver.c
src/parallels/parallels_driver.c
src/qemu/qemu_driver.c
src/test/test_driver.c
src/uml/uml_driver.c

index edbf1e4fd20d0bf3eb1df3a76b6028e2ec3c22a0..dc76cf702df706ae2d979e79610faaa2e3be634e 100644 (file)
@@ -797,8 +797,7 @@ static virDomainPtr bhyveDomainLookupByName(virConnectPtr conn,
         dom->id = vm->def->id;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return dom;
 }
 
index 686c614f4564e1b01e09c3e87099056b0b138262..82b9a0e9a381943409bfc945a6e659f46bf1a7d0 100644 (file)
@@ -1157,10 +1157,12 @@ virDomainObjPtr virDomainObjListFindByName(virDomainObjListPtr doms,
     virDomainObjPtr obj;
     virObjectLock(doms);
     obj = virHashSearch(doms->objs, virDomainObjListSearchName, name);
+    virObjectRef(obj);
     if (obj) {
         virObjectLock(obj);
         if (obj->removing) {
             virObjectUnlock(obj);
+            virObjectUnref(obj);
             obj = NULL;
         }
     }
index 6a54c739b896ec603efdc05a5b2ef9653355b681..393f8bd6302d23dcf88e6e3efbc9b8e408b4d5fa 100644 (file)
@@ -1001,8 +1001,7 @@ libxlDomainLookupByName(virConnectPtr conn, const char *name)
         dom->id = vm->def->id;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return dom;
 }
 
@@ -4955,12 +4954,12 @@ libxlDomainMigrateFinish3Params(virConnectPtr dconn,
     }
 
     if (virDomainMigrateFinish3ParamsEnsureACL(dconn, vm->def) < 0) {
-        virObjectUnlock(vm);
+        virDomainObjEndAPI(&vm);
         return NULL;
     }
 
     if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
-        virObjectUnlock(vm);
+        virDomainObjEndAPI(&vm);
         return NULL;
     }
 
@@ -4969,8 +4968,7 @@ libxlDomainMigrateFinish3Params(virConnectPtr dconn,
     if (!libxlDomainObjEndJob(driver, vm))
         vm = NULL;
 
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
 
     return ret;
 }
index 38d9bed70b271b610f951fccc71f599d6bdac23e..188ff809d4f75c247bb7cdf81e8f200783cf7ec9 100644 (file)
@@ -321,8 +321,7 @@ static virDomainPtr lxcDomainLookupByName(virConnectPtr conn,
         dom->id = vm->def->id;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return dom;
 }
 
index 1bb8973ff752c9996952d2637e1b7f3e838a7590..10d94ff8b6fcd511128d1e7933f83e7b4cbf5b67 100644 (file)
@@ -427,8 +427,7 @@ static virDomainPtr openvzDomainLookupByName(virConnectPtr conn,
         dom->id = vm->def->id;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return dom;
 }
 
@@ -1007,6 +1006,7 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
         virReportError(VIR_ERR_OPERATION_FAILED,
                        _("Already an OPENVZ VM active with the id '%s'"),
                        vmdef->name);
+        virDomainObjEndAPI(&vm);
         goto cleanup;
     }
     if (!(vm = virDomainObjListAdd(driver->domains, vmdef,
@@ -1103,6 +1103,7 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
         virReportError(VIR_ERR_OPERATION_FAILED,
                        _("Already an OPENVZ VM defined with the id '%s'"),
                        vmdef->name);
+        virDomainObjEndAPI(&vm);
         goto cleanup;
     }
     if (!(vm = virDomainObjListAdd(driver->domains,
@@ -1208,8 +1209,7 @@ openvzDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
     ret = 0;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return ret;
 }
 
@@ -2508,8 +2508,7 @@ openvzDomainMigrateFinish3Params(virConnectPtr dconn,
         dom->id = vm->def->id;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return dom;
 }
 
index c791b5b49e749d126de79a687ef4ac11cb5da5c9..18846f5f262e84731df4de05b04fc6d48d18cd62 100644 (file)
@@ -526,8 +526,7 @@ parallelsDomainLookupByName(virConnectPtr conn, const char *name)
         ret->id = dom->def->id;
 
  cleanup:
-    if (dom)
-        virObjectUnlock(dom);
+    virDomainObjEndAPI(&dom);
     return ret;
 }
 
index f07766e10f650b6679fdff556d1cc5345f542bea..989c20c8dad171722966f0a121ad7eb230fb2fdf 100644 (file)
@@ -1511,8 +1511,7 @@ static virDomainPtr qemuDomainLookupByName(virConnectPtr conn,
     if (dom) dom->id = vm->def->id;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return dom;
 }
 
@@ -12287,11 +12286,10 @@ qemuDomainMigrateFinish2(virConnectPtr dconn,
     }
 
     if (virDomainMigrateFinish2EnsureACL(dconn, vm->def) < 0) {
-        virObjectUnlock(vm);
+        virDomainObjEndAPI(&vm);
         goto cleanup;
     }
 
-    virObjectRef(vm);
     /* Do not use cookies in v2 protocol, since the cookie
      * length was not sufficiently large, causing failures
      * migrating between old & new libvirtd
@@ -12702,12 +12700,10 @@ qemuDomainMigrateFinish3(virConnectPtr dconn,
     }
 
     if (virDomainMigrateFinish3EnsureACL(dconn, vm->def) < 0) {
-        virObjectUnlock(vm);
+        virDomainObjEndAPI(&vm);
         return NULL;
     }
 
-    virObjectRef(vm);
-
     return qemuMigrationFinish(driver, dconn, vm,
                                cookiein, cookieinlen,
                                cookieout, cookieoutlen,
@@ -12747,12 +12743,10 @@ qemuDomainMigrateFinish3Params(virConnectPtr dconn,
     }
 
     if (virDomainMigrateFinish3ParamsEnsureACL(dconn, vm->def) < 0) {
-        virObjectUnlock(vm);
+        virDomainObjEndAPI(&vm);
         return NULL;
     }
 
-    virObjectRef(vm);
-
     return qemuMigrationFinish(driver, dconn, vm,
                                cookiein, cookieinlen,
                                cookieout, cookieoutlen,
index 133805cdb77d5c00a2ff4868e11c374d235e27b0..51ab2e059ac706c0a0a9c9d0b12d8ff033b3ab83 100644 (file)
@@ -1859,8 +1859,7 @@ static virDomainPtr testDomainLookupByName(virConnectPtr conn,
         ret->id = dom->def->id;
 
  cleanup:
-    if (dom)
-        virObjectUnlock(dom);
+    virDomainObjEndAPI(&dom);
     return ret;
 }
 
@@ -1899,16 +1898,12 @@ static int testDomainDestroy(virDomainPtr domain)
                                      VIR_DOMAIN_EVENT_STOPPED,
                                      VIR_DOMAIN_EVENT_STOPPED_DESTROYED);
 
-    if (!privdom->persistent) {
-        virDomainObjListRemove(privconn->domains,
-                               privdom);
-        privdom = NULL;
-    }
+    if (!privdom->persistent)
+        virDomainObjListRemove(privconn->domains, privdom);
 
     ret = 0;
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event)
         testObjectEventQueue(privconn, event);
     testDriverUnlock(privconn);
@@ -1946,8 +1941,7 @@ static int testDomainResume(virDomainPtr domain)
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event) {
         testDriverLock(privconn);
         testObjectEventQueue(privconn, event);
@@ -1988,8 +1982,7 @@ static int testDomainSuspend(virDomainPtr domain)
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
 
     if (event) {
         testDriverLock(privconn);
@@ -2029,16 +2022,12 @@ static int testDomainShutdownFlags(virDomainPtr domain,
                                      VIR_DOMAIN_EVENT_STOPPED,
                                      VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
 
-    if (!privdom->persistent) {
-        virDomainObjListRemove(privconn->domains,
-                               privdom);
-        privdom = NULL;
-    }
+    if (!privdom->persistent)
+        virDomainObjListRemove(privconn->domains, privdom);
 
     ret = 0;
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event)
         testObjectEventQueue(privconn, event);
     testDriverUnlock(privconn);
@@ -2104,17 +2093,13 @@ static int testDomainReboot(virDomainPtr domain,
                                          VIR_DOMAIN_EVENT_STOPPED,
                                          VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
 
-        if (!privdom->persistent) {
-            virDomainObjListRemove(privconn->domains,
-                                   privdom);
-            privdom = NULL;
-        }
+        if (!privdom->persistent)
+            virDomainObjListRemove(privconn->domains, privdom);
     }
 
     ret = 0;
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event)
         testObjectEventQueue(privconn, event);
     testDriverUnlock(privconn);
@@ -2153,8 +2138,7 @@ static int testDomainGetInfo(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -2184,8 +2168,7 @@ testDomainGetState(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -2268,11 +2251,8 @@ testDomainSaveFlags(virDomainPtr domain, const char *path,
                                      VIR_DOMAIN_EVENT_STOPPED,
                                      VIR_DOMAIN_EVENT_STOPPED_SAVED);
 
-    if (!privdom->persistent) {
-        virDomainObjListRemove(privconn->domains,
-                               privdom);
-        privdom = NULL;
-    }
+    if (!privdom->persistent)
+        virDomainObjListRemove(privconn->domains, privdom);
 
     ret = 0;
  cleanup:
@@ -2285,8 +2265,7 @@ testDomainSaveFlags(virDomainPtr domain, const char *path,
         VIR_FORCE_CLOSE(fd);
         unlink(path);
     }
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event)
         testObjectEventQueue(privconn, event);
     testDriverUnlock(privconn);
@@ -2458,18 +2437,14 @@ static int testDomainCoreDumpWithFormat(virDomainPtr domain,
         event = virDomainEventLifecycleNewFromObj(privdom,
                                          VIR_DOMAIN_EVENT_STOPPED,
                                          VIR_DOMAIN_EVENT_STOPPED_CRASHED);
-        if (!privdom->persistent) {
-            virDomainObjListRemove(privconn->domains,
-                                   privdom);
-            privdom = NULL;
-        }
+        if (!privdom->persistent)
+            virDomainObjListRemove(privconn->domains, privdom);
     }
 
     ret = 0;
  cleanup:
     VIR_FORCE_CLOSE(fd);
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event)
         testObjectEventQueue(privconn, event);
     testDriverUnlock(privconn);
@@ -2517,8 +2492,7 @@ testDomainGetMaxMemory(virDomainPtr domain)
     ret = virDomainDefGetMemoryActual(privdom->def);
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -2544,8 +2518,7 @@ static int testDomainSetMaxMemory(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -2575,8 +2548,7 @@ static int testDomainSetMemory(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -2806,8 +2778,7 @@ static int testDomainGetVcpus(virDomainPtr domain,
 
     ret = maxinfo;
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -2863,8 +2834,7 @@ static int testDomainPinVcpu(virDomainPtr domain,
 
     ret = 0;
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -2894,8 +2864,7 @@ static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
                              virDomainDefFormatConvertXMLFlags(flags));
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3014,8 +2983,7 @@ static char *testDomainGetMetadata(virDomainPtr dom,
                                   privconn->xmlopt, flags);
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3048,8 +3016,7 @@ static int testDomainSetMetadata(virDomainPtr dom,
                                   NULL, NULL, flags);
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3118,8 +3085,7 @@ static int testDomainCreateWithFlags(virDomainPtr domain, unsigned int flags)
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event)
         testObjectEventQueue(privconn, event);
     testDriverUnlock(privconn);
@@ -3183,19 +3149,15 @@ static int testDomainUndefineFlags(virDomainPtr domain,
                                      VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
     privdom->hasManagedSave = false;
 
-    if (virDomainObjIsActive(privdom)) {
+    if (virDomainObjIsActive(privdom))
         privdom->persistent = 0;
-    } else {
-        virDomainObjListRemove(privconn->domains,
-                               privdom);
-        privdom = NULL;
-    }
+    else
+        virDomainObjListRemove(privconn->domains, privdom);
 
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     if (event)
         testObjectEventQueue(privconn, event);
     testDriverUnlock(privconn);
@@ -3228,8 +3190,7 @@ static int testDomainGetAutostart(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3255,8 +3216,7 @@ static int testDomainSetAutostart(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3305,8 +3265,7 @@ testDomainGetSchedulerParametersFlags(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3356,8 +3315,7 @@ testDomainSetSchedulerParametersFlags(virDomainPtr domain,
     ret = 0;
 
  cleanup:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3417,8 +3375,7 @@ static int testDomainBlockStats(virDomainPtr domain,
 
     ret = 0;
  error:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -3476,8 +3433,7 @@ static int testDomainInterfaceStats(virDomainPtr domain,
 
     ret = 0;
  error:
-    if (privdom)
-        virObjectUnlock(privdom);
+    virDomainObjEndAPI(&privdom);
     return ret;
 }
 
@@ -6211,8 +6167,7 @@ testDomainManagedSave(virDomainPtr dom, unsigned int flags)
 
     ret = 0;
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     if (event) {
         testDriverLock(privconn);
         testObjectEventQueue(privconn, event);
@@ -6242,8 +6197,7 @@ testDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
 
     ret = vm->hasManagedSave;
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     testDriverUnlock(privconn);
     return ret;
 }
@@ -6268,8 +6222,7 @@ testDomainManagedSaveRemove(virDomainPtr dom, unsigned int flags)
     vm->hasManagedSave = false;
     ret = 0;
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     testDriverUnlock(privconn);
     return ret;
 }
index 9cee541598604ff93980cb3ea51ab2f49e94fcdb..60f8eb5c6dcade57bdc977ed9e48fe317bca5cb4 100644 (file)
@@ -339,7 +339,7 @@ umlInotifyEvent(int watch,
         if (e.mask & IN_DELETE) {
             VIR_DEBUG("Got inotify domain shutdown '%s'", name);
             if (!virDomainObjIsActive(dom)) {
-                virObjectUnlock(dom);
+                virDomainObjEndAPI(&dom);
                 continue;
             }
 
@@ -348,20 +348,17 @@ umlInotifyEvent(int watch,
             event = virDomainEventLifecycleNewFromObj(dom,
                                              VIR_DOMAIN_EVENT_STOPPED,
                                              VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
-            if (!dom->persistent) {
-                virDomainObjListRemove(driver->domains,
-                                       dom);
-                dom = NULL;
-            }
+            if (!dom->persistent)
+                virDomainObjListRemove(driver->domains, dom);
         } else if (e.mask & (IN_CREATE | IN_MODIFY)) {
             VIR_DEBUG("Got inotify domain startup '%s'", name);
             if (virDomainObjIsActive(dom)) {
-                virObjectUnlock(dom);
+                virDomainObjEndAPI(&dom);
                 continue;
             }
 
             if (umlReadPidFile(driver, dom) < 0) {
-                virObjectUnlock(dom);
+                virDomainObjEndAPI(&dom);
                 continue;
             }
 
@@ -382,11 +379,8 @@ umlInotifyEvent(int watch,
                 event = virDomainEventLifecycleNewFromObj(dom,
                                                  VIR_DOMAIN_EVENT_STOPPED,
                                                  VIR_DOMAIN_EVENT_STOPPED_FAILED);
-                if (!dom->persistent) {
-                    virDomainObjListRemove(driver->domains,
-                                           dom);
-                    dom = NULL;
-                }
+                if (!dom->persistent)
+                    virDomainObjListRemove(driver->domains, dom);
             } else if (umlIdentifyChrPTY(driver, dom) < 0) {
                 VIR_WARN("Could not identify character devices for new domain");
                 umlShutdownVMDaemon(driver, dom,
@@ -395,15 +389,11 @@ umlInotifyEvent(int watch,
                 event = virDomainEventLifecycleNewFromObj(dom,
                                                  VIR_DOMAIN_EVENT_STOPPED,
                                                  VIR_DOMAIN_EVENT_STOPPED_FAILED);
-                if (!dom->persistent) {
-                    virDomainObjListRemove(driver->domains,
-                                           dom);
-                    dom = NULL;
-                }
+                if (!dom->persistent)
+                    virDomainObjListRemove(driver->domains, dom);
             }
         }
-        if (dom)
-            virObjectUnlock(dom);
+        virDomainObjEndAPI(&dom);
         if (event) {
             umlDomainEventQueue(driver, event);
             event = NULL;
@@ -1448,8 +1438,7 @@ static virDomainPtr umlDomainLookupByName(virConnectPtr conn,
     if (dom) dom->id = vm->def->id;
 
  cleanup:
-    if (vm)
-        virObjectUnlock(vm);
+    virDomainObjEndAPI(&vm);
     return dom;
 }