]> xenbits.xensource.com Git - libvirt.git/commitdiff
Convert drivers to thread safe APIs for adding callbacks
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 13 Dec 2011 11:14:46 +0000 (11:14 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 19 Dec 2011 11:08:10 +0000 (11:08 +0000)
* src/libxl/libxl_driver.c, src/lxc/lxc_driver.c,
  src/qemu/qemu_driver.c, src/remote/remote_driver.c,
  src/test/test_driver.c, src/uml/uml_driver.c,
  src/vbox/vbox_tmpl.c, src/xen/xen_driver.c: Convert
  to threadsafe APIs

src/libxl/libxl_driver.c
src/lxc/lxc_driver.c
src/qemu/qemu_driver.c
src/remote/remote_driver.c
src/test/test_driver.c
src/uml/uml_driver.c
src/vbox/vbox_tmpl.c
src/xen/xen_driver.c

index 46504dca8761c60373534db96234e66322d8d260..b9382ee70212108bd8c0fde9ed09adf16d30209b 100644 (file)
@@ -1115,8 +1115,8 @@ libxlClose(virConnectPtr conn ATTRIBUTE_UNUSED)
     libxlDriverPrivatePtr driver = conn->privateData;
 
     libxlDriverLock(driver);
-    virDomainEventCallbackListRemoveConn(conn,
-                                         driver->domainEventState->callbacks);
+    virDomainEventStateDeregisterConn(conn,
+                                      driver->domainEventState);
     libxlDriverUnlock(driver);
     conn->privateData = NULL;
     return 0;
@@ -3404,9 +3404,9 @@ libxlDomainEventRegister(virConnectPtr conn,
     int ret;
 
     libxlDriverLock(driver);
-    ret = virDomainEventCallbackListAdd(conn,
-                                        driver->domainEventState->callbacks,
-                                        callback, opaque, freecb);
+    ret = virDomainEventStateRegister(conn,
+                                      driver->domainEventState,
+                                      callback, opaque, freecb);
     libxlDriverUnlock(driver);
 
     return ret;
@@ -3851,10 +3851,10 @@ libxlDomainEventRegisterAny(virConnectPtr conn, virDomainPtr dom, int eventID,
     int ret;
 
     libxlDriverLock(driver);
-    if (virDomainEventCallbackListAddID(conn,
-                                        driver->domainEventState->callbacks,
-                                        dom, eventID, callback, opaque,
-                                        freecb, &ret) < 0)
+    if (virDomainEventStateRegisterID(conn,
+                                      driver->domainEventState,
+                                      dom, eventID, callback, opaque,
+                                      freecb, &ret) < 0)
         ret = -1;
     libxlDriverUnlock(driver);
 
index 6b17c75be021e6ee5d4aa42e199d144926452306..6a9ebde823361049a9078ae23b81174438abf63f 100644 (file)
@@ -179,8 +179,8 @@ static int lxcClose(virConnectPtr conn)
     lxc_driver_t *driver = conn->privateData;
 
     lxcDriverLock(driver);
-    virDomainEventCallbackListRemoveConn(conn,
-                                         driver->domainEventState->callbacks);
+    virDomainEventStateDeregisterConn(conn,
+                                      driver->domainEventState);
     lxcProcessAutoDestroyRun(driver, conn);
     lxcDriverUnlock(driver);
 
@@ -2126,9 +2126,9 @@ lxcDomainEventRegister(virConnectPtr conn,
     int ret;
 
     lxcDriverLock(driver);
-    ret = virDomainEventCallbackListAdd(conn,
-                                        driver->domainEventState->callbacks,
-                                        callback, opaque, freecb);
+    ret = virDomainEventStateRegister(conn,
+                                      driver->domainEventState,
+                                      callback, opaque, freecb);
     lxcDriverUnlock(driver);
 
     return ret;
@@ -2164,10 +2164,10 @@ lxcDomainEventRegisterAny(virConnectPtr conn,
     int ret;
 
     lxcDriverLock(driver);
-    if (virDomainEventCallbackListAddID(conn,
-                                        driver->domainEventState->callbacks,
-                                        dom, eventID,
-                                        callback, opaque, freecb, &ret) < 0)
+    if (virDomainEventStateRegisterID(conn,
+                                      driver->domainEventState,
+                                      dom, eventID,
+                                      callback, opaque, freecb, &ret) < 0)
         ret = -1;
     lxcDriverUnlock(driver);
 
index 2b77c8c6b3d75ac3125d253c50a4c52f6e59e118..662fd6d30d04602f5ad8bce9f28d0d6dfc76020e 100644 (file)
@@ -900,8 +900,8 @@ static int qemudClose(virConnectPtr conn) {
 
     /* Get rid of callbacks registered for this conn */
     qemuDriverLock(driver);
-    virDomainEventCallbackListRemoveConn(conn,
-                                         driver->domainEventState->callbacks);
+    virDomainEventStateDeregisterConn(conn,
+                                      driver->domainEventState);
     qemuProcessAutoDestroyRun(driver, conn);
     qemuDriverUnlock(driver);
 
@@ -7959,9 +7959,9 @@ qemuDomainEventRegister(virConnectPtr conn,
     int ret;
 
     qemuDriverLock(driver);
-    ret = virDomainEventCallbackListAdd(conn,
-                                        driver->domainEventState->callbacks,
-                                        callback, opaque, freecb);
+    ret = virDomainEventStateRegister(conn,
+                                      driver->domainEventState,
+                                      callback, opaque, freecb);
     qemuDriverUnlock(driver);
 
     return ret;
@@ -7997,10 +7997,10 @@ qemuDomainEventRegisterAny(virConnectPtr conn,
     int ret;
 
     qemuDriverLock(driver);
-    if (virDomainEventCallbackListAddID(conn,
-                                        driver->domainEventState->callbacks,
-                                        dom, eventID,
-                                        callback, opaque, freecb, &ret) < 0)
+    if (virDomainEventStateRegisterID(conn,
+                                      driver->domainEventState,
+                                      dom, eventID,
+                                      callback, opaque, freecb, &ret) < 0)
         ret = -1;
     qemuDriverUnlock(driver);
 
index a0cf7d356c5d45ff15165dc7a467679849abf3b3..84a371057c904e1bdfe2ef7d9a61e91f0315b0e1 100644 (file)
@@ -3124,13 +3124,8 @@ static int remoteDomainEventRegister(virConnectPtr conn,
 
     remoteDriverLock(priv);
 
-    if (priv->domainEventState->timer < 0) {
-         remoteError(VIR_ERR_NO_SUPPORT, "%s", _("no event support"));
-         goto done;
-    }
-
-    if ((count = virDomainEventCallbackListAdd(conn, priv->domainEventState->callbacks,
-                                               callback, opaque, freecb)) < 0) {
+    if ((count = virDomainEventStateRegister(conn, priv->domainEventState,
+                                             callback, opaque, freecb)) < 0) {
          remoteError(VIR_ERR_RPC, "%s", _("adding cb to list"));
          goto done;
     }
@@ -3155,17 +3150,16 @@ static int remoteDomainEventDeregister(virConnectPtr conn,
 {
     struct private_data *priv = conn->privateData;
     int rv = -1;
+    int count;
 
     remoteDriverLock(priv);
 
-    if (virDomainEventStateDeregister(conn,
-                                      priv->domainEventState,
-                                      callback) < 0)
+    if ((count = virDomainEventStateDeregister(conn,
+                                               priv->domainEventState,
+                                               callback)) < 0)
         goto done;
 
-    if (virDomainEventCallbackListCountID(conn,
-                                          priv->domainEventState->callbacks,
-                                          VIR_DOMAIN_EVENT_ID_LIFECYCLE) == 0) {
+    if (count == 0) {
         /* Tell the server when we are the last callback deregistering */
         if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_EVENTS_DEREGISTER,
                   (xdrproc_t) xdr_void, (char *) NULL,
@@ -3763,16 +3757,11 @@ static int remoteDomainEventRegisterAny(virConnectPtr conn,
 
     remoteDriverLock(priv);
 
-    if (priv->domainEventState->timer < 0) {
-         remoteError(VIR_ERR_NO_SUPPORT, "%s", _("no event support"));
-         goto done;
-    }
-
-    if ((count = virDomainEventCallbackListAddID(conn,
-                                                 priv->domainEventState->callbacks,
-                                                 dom, eventID,
-                                                 callback, opaque, freecb,
-                                                 &callbackID)) < 0) {
+    if ((count = virDomainEventStateRegisterID(conn,
+                                               priv->domainEventState,
+                                               dom, eventID,
+                                               callback, opaque, freecb,
+                                               &callbackID)) < 0) {
         remoteError(VIR_ERR_RPC, "%s", _("adding cb to list"));
         goto done;
     }
@@ -3785,9 +3774,9 @@ static int remoteDomainEventRegisterAny(virConnectPtr conn,
         if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_EVENTS_REGISTER_ANY,
                   (xdrproc_t) xdr_remote_domain_events_register_any_args, (char *) &args,
                   (xdrproc_t) xdr_void, (char *)NULL) == -1) {
-            virDomainEventCallbackListRemoveID(conn,
-                                               priv->domainEventState->callbacks,
-                                               callbackID);
+            virDomainEventStateDeregisterID(conn,
+                                            priv->domainEventState,
+                                            callbackID);
             goto done;
         }
     }
@@ -3807,27 +3796,28 @@ static int remoteDomainEventDeregisterAny(virConnectPtr conn,
     int rv = -1;
     remote_domain_events_deregister_any_args args;
     int eventID;
+    int count;
 
     remoteDriverLock(priv);
 
-    if ((eventID = virDomainEventCallbackListEventID(conn,
-                                                     priv->domainEventState->callbacks,
-                                                     callbackID)) < 0) {
+    if ((eventID = virDomainEventStateEventID(conn,
+                                              priv->domainEventState,
+                                              callbackID)) < 0) {
         remoteError(VIR_ERR_RPC, _("unable to find callback ID %d"), callbackID);
         goto done;
     }
 
-    if (virDomainEventStateDeregisterID(conn,
-                                        priv->domainEventState,
-                                        callbackID) < 0)
+    if ((count = virDomainEventStateDeregisterID(conn,
+                                                 priv->domainEventState,
+                                                 callbackID)) < 0) {
+        remoteError(VIR_ERR_RPC, _("unable to find callback ID %d"), callbackID);
         goto done;
+    }
 
     /* If that was the last callback for this eventID, we need to disable
      * events on the server */
-    if (virDomainEventCallbackListCountID(conn,
-                                          priv->domainEventState->callbacks,
-                                          eventID) == 0) {
-        args.eventID = eventID;
+    if (count == 0) {
+        args.eventID = callbackID;
 
         if (call (conn, priv, 0, REMOTE_PROC_DOMAIN_EVENTS_DEREGISTER_ANY,
                   (xdrproc_t) xdr_remote_domain_events_deregister_any_args, (char *) &args,
index 590ef3ebd9c6a07ee1f2b8d5772b16ec5090524b..1c5bd8462cda950ef407a6a1b8f684febb0c1c18 100644 (file)
@@ -5404,9 +5404,9 @@ testDomainEventRegister(virConnectPtr conn,
     int ret;
 
     testDriverLock(driver);
-    ret = virDomainEventCallbackListAdd(conn,
-                                        driver->domainEventState->callbacks,
-                                        callback, opaque, freecb);
+    ret = virDomainEventStateRegister(conn,
+                                      driver->domainEventState,
+                                      callback, opaque, freecb);
     testDriverUnlock(driver);
 
     return ret;
@@ -5442,10 +5442,10 @@ testDomainEventRegisterAny(virConnectPtr conn,
     int ret;
 
     testDriverLock(driver);
-    if (virDomainEventCallbackListAddID(conn,
-                                        driver->domainEventState->callbacks,
-                                        dom, eventID,
-                                        callback, opaque, freecb, &ret) < 0)
+    if (virDomainEventStateRegisterID(conn,
+                                      driver->domainEventState,
+                                      dom, eventID,
+                                      callback, opaque, freecb, &ret) < 0)
         ret = -1;
     testDriverUnlock(driver);
 
index 420488d8bdf057cfe2fad2862a5e057565475903..4d875c8e35b9aed95aeee1a2ab3c90b0dc4ea87f 100644 (file)
@@ -1194,8 +1194,8 @@ static int umlClose(virConnectPtr conn) {
     struct uml_driver *driver = conn->privateData;
 
     umlDriverLock(driver);
-    virDomainEventCallbackListRemoveConn(conn,
-                                         driver->domainEventState->callbacks);
+    virDomainEventStateDeregisterConn(conn,
+                                      driver->domainEventState);
     umlProcessAutoDestroyRun(driver, conn);
     umlDriverUnlock(driver);
 
@@ -2447,9 +2447,9 @@ umlDomainEventRegister(virConnectPtr conn,
     int ret;
 
     umlDriverLock(driver);
-    ret = virDomainEventCallbackListAdd(conn,
-                                        driver->domainEventState->callbacks,
-                                        callback, opaque, freecb);
+    ret = virDomainEventStateRegister(conn,
+                                      driver->domainEventState,
+                                      callback, opaque, freecb);
     umlDriverUnlock(driver);
 
     return ret;
@@ -2483,10 +2483,10 @@ umlDomainEventRegisterAny(virConnectPtr conn,
     int ret;
 
     umlDriverLock(driver);
-    if (virDomainEventCallbackListAddID(conn,
-                                        driver->domainEventState->callbacks,
-                                        dom, eventID,
-                                        callback, opaque, freecb, &ret) < 0)
+    if (virDomainEventStateRegisterID(conn,
+                                      driver->domainEventState,
+                                      dom, eventID,
+                                      callback, opaque, freecb, &ret) < 0)
         ret = -1;
     umlDriverUnlock(driver);
 
index c4ae6b6fcb5e2670e6388343df994d671ca54fe7..1c6456fc4418fdb29a3423704abd77f5a70dcaac 100644 (file)
@@ -7188,12 +7188,12 @@ static int vboxDomainEventRegister (virConnectPtr conn,
              * later you can iterate over them
              */
 
-            ret = virDomainEventCallbackListAdd(conn, data->domainEvents->callbacks,
-                                                callback, opaque, freecb);
-            VIR_DEBUG("virDomainEventCallbackListAdd (ret = %d) ( conn: %p, "
-                  "data->domainEvents->callbacks: %p, callback: %p, opaque: %p, "
-                  "freecb: %p )", ret, conn, data->domainEvents->callbacks, callback,
-                  opaque, freecb);
+            ret = virDomainEventStateRegister(conn, data->domainEvents,
+                                              callback, opaque, freecb);
+            VIR_DEBUG("virDomainEventStateRegister (ret = %d) ( conn: %p, "
+                      "callback: %p, opaque: %p, "
+                      "freecb: %p )", ret, conn, callback,
+                      opaque, freecb);
         }
     }
 
@@ -7280,13 +7280,13 @@ static int vboxDomainEventRegisterAny(virConnectPtr conn,
              * later you can iterate over them
              */
 
-            if (virDomainEventCallbackListAddID(conn, data->domainEvents->callbacks,
-                                                dom, eventID,
-                                                callback, opaque, freecb, &ret) < 0)
+            if (virDomainEventStateRegisterID(conn, data->domainEvents,
+                                              dom, eventID,
+                                              callback, opaque, freecb, &ret) < 0)
                 ret = -1;
-            VIR_DEBUG("virDomainEventCallbackListAddID (ret = %d) ( conn: %p, "
-                      "data->domainEvents->callbacks: %p, callback: %p, opaque: %p, "
-                      "freecb: %p )", ret, conn, data->domainEvents->callbacks, callback,
+            VIR_DEBUG("virDomainEventStateRegisterID (ret = %d) ( conn: %p, "
+                      "callback: %p, opaque: %p, "
+                      "freecb: %p )", ret, conn, callback,
                       opaque, freecb);
         }
     }
index 57170c6a2d6a70f638e04978b27307ec0c5fbe42..2fc0c2882d835199cc3f7150adeba55d0c8ba04f 100644 (file)
@@ -1847,8 +1847,8 @@ xenUnifiedDomainEventRegister(virConnectPtr conn,
         return -1;
     }
 
-    ret = virDomainEventCallbackListAdd(conn, priv->domainEvents->callbacks,
-                                        callback, opaque, freefunc);
+    ret = virDomainEventStateRegister(conn, priv->domainEvents,
+                                      callback, opaque, freefunc);
 
     xenUnifiedUnlock(priv);
     return (ret);
@@ -1897,9 +1897,9 @@ xenUnifiedDomainEventRegisterAny(virConnectPtr conn,
         return -1;
     }
 
-    if (virDomainEventCallbackListAddID(conn, priv->domainEvents->callbacks,
-                                        dom, eventID,
-                                        callback, opaque, freefunc, &ret) < 0)
+    if (virDomainEventStateRegisterID(conn, priv->domainEvents,
+                                      dom, eventID,
+                                      callback, opaque, freefunc, &ret) < 0)
         ret = -1;
 
     xenUnifiedUnlock(priv);