[libvirt] [PATCH 1/1] Cleanups for udev init code

David Allan dallan at redhat.com
Tue Jan 26 22:02:08 UTC 2010


---
 src/node_device/node_device_udev.c |   34 +++++++++++++---------------------
 1 files changed, 13 insertions(+), 21 deletions(-)

diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index dcd889d..6895ac5 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1368,8 +1368,9 @@ static int udevDeviceMonitorShutdown(void)

         priv = driverState->privateData;

-        if (priv->watch != -1)
+        if (priv->watch != -1) {
             virEventRemoveHandle(priv->watch);
+        }

         udev_monitor = DRV_STATE_UDEV_MONITOR(driverState);

@@ -1387,6 +1388,7 @@ static int udevDeviceMonitorShutdown(void)
         virMutexDestroy(&driverState->lock);
         VIR_FREE(driverState);
         VIR_FREE(priv);
+
     } else {
         ret = -1;
     }
@@ -1547,28 +1549,22 @@ static int udevDeviceMonitorStartup(int privileged ATTRIBUTE_UNUSED)
 {
     udevPrivate *priv = NULL;
     struct udev *udev = NULL;
-    int ret = 0;
+    int ret = -1;

-    if (VIR_ALLOC(priv) < 0) {
+    if (VIR_ALLOC(driverState) < 0) {
         virReportOOMError(NULL);
-        ret = -1;
         goto out;
     }

-    priv->watch = -1;
-
-    if (VIR_ALLOC(driverState) < 0) {
+    if (VIR_ALLOC(priv) < 0) {
         virReportOOMError(NULL);
-        VIR_FREE(priv);
-        ret = -1;
         goto out;
     }

+    priv->watch = -1;
+
     if (virMutexInit(&driverState->lock) < 0) {
         VIR_ERROR0("Failed to initialize mutex for driverState");
-        VIR_FREE(priv);
-        VIR_FREE(driverState);
-        ret = -1;
         goto out;
     }

@@ -1585,10 +1581,8 @@ static int udevDeviceMonitorStartup(int privileged ATTRIBUTE_UNUSED)

     priv->udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
     if (priv->udev_monitor == NULL) {
-        VIR_FREE(priv);
         nodeDeviceUnlock(driverState);
         VIR_ERROR0("udev_monitor_new_from_netlink returned NULL");
-        ret = -1;
         goto out;
     }

@@ -1608,27 +1602,25 @@ static int udevDeviceMonitorStartup(int privileged ATTRIBUTE_UNUSED)
     priv->watch = virEventAddHandle(udev_monitor_get_fd(priv->udev_monitor),
                                     VIR_EVENT_HANDLE_READABLE,
                                     udevEventHandleCallback, NULL, NULL);
+
+    nodeDeviceUnlock(driverState);
+
     if (priv->watch == -1) {
-        nodeDeviceUnlock(driverState);
-        ret = -1;
         goto out;
     }

-    nodeDeviceUnlock(driverState);
-
     /* Create a fictional 'computer' device to root the device tree. */
     if (udevSetupSystemDev() != 0) {
-        ret = -1;
         goto out;
     }

     /* Populate with known devices */
-
     if (udevEnumerateDevices(udev) != 0) {
-        ret = -1;
         goto out;
     }

+    ret = 0;
+
 out:
     if (ret == -1) {
         udevDeviceMonitorShutdown();
-- 
1.6.5.5




More information about the libvir-list mailing list