xserver: Branch 'master'

Remi Cardona remi at kemper.freedesktop.org
Tue Jul 28 03:20:13 PDT 2009


 config/hal.c |   32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

New commits:
commit b1c3dc6ae226db178420e3b5f297b94afc87c94c
Author: Rémi Cardona <remi at gentoo.org>
Date:   Mon Jul 27 12:07:51 2009 +0200

    config: add HAL error checks
    
    This patch simplifies error handling in the HAL code and fixes a
    segfault if libhal_find_device_by_capability() failed.
    
    Fixes http://bugs.gentoo.org/278760
    
    Based on a patch by Martin von Gagern <Martin.vGagern at gmx.net>
    
    Signed-off-by: Rémi Cardona <remi at gentoo.org>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/config/hal.c b/config/hal.c
index 731d9b8..59bff66 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -474,13 +474,13 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
     char **devices;
     int num_devices, i;
 
+    if (info->hal_ctx)
+        return TRUE; /* already registered, pretend we did something */
+
     info->system_bus = connection;
 
     dbus_error_init(&error);
 
-    if (info->hal_ctx)
-        return TRUE; /* already registered, pretend we did something */
-
     info->hal_ctx = libhal_ctx_new();
     if (!info->hal_ctx) {
         LogMessage(X_ERROR, "config/hal: couldn't create HAL context\n");
@@ -501,7 +501,7 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
         LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n",
 		   error.name ? error.name : "unknown error",
 		   error.message ? error.message : "null");
-        goto out_ctx2;
+        goto out_ctx;
     }
     libhal_ctx_set_device_added(info->hal_ctx, device_added);
     libhal_ctx_set_device_removed(info->hal_ctx, device_removed);
@@ -509,6 +509,12 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
     devices = libhal_find_device_by_capability(info->hal_ctx, "input",
                                                &num_devices, &error);
     /* FIXME: Get default devices if error is set. */
+    if (dbus_error_is_set(&error)) {
+        LogMessage(X_ERROR, "config/hal: couldn't find input device: %s (%s)\n",
+		   error.name ? error.name : "unknown error",
+		   error.message ? error.message : "null");
+        goto out_ctx;
+    }
     for (i = 0; i < num_devices; i++)
         device_added(info->hal_ctx, devices[i]);
     libhal_free_string_array(devices);
@@ -517,13 +523,19 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
 
     return TRUE;
 
-out_ctx2:
-    if (!libhal_ctx_shutdown(info->hal_ctx, &error))
-        LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
-		   error.name ? error.name : "unknown error",
-		   error.message ? error.message : "null");
 out_ctx:
-    libhal_ctx_free(info->hal_ctx);
+    dbus_error_free(&error);
+
+    if (info->hal_ctx) {
+        if (!libhal_ctx_shutdown(info->hal_ctx, &error)) {
+            LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
+		       error.name ? error.name : "unknown error",
+		       error.message ? error.message : "null");
+            dbus_error_free(&error);
+        }
+        libhal_ctx_free(info->hal_ctx);
+    }
+
 out_err:
     dbus_error_free(&error);
 


More information about the xorg-commit mailing list