hald might not be ready when we need it, wait for it for a few seconds

Signed-off-by: Yan Li <[email protected]>
---
 config/hal.c |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/config/hal.c b/config/hal.c
index 8dfbb07..bcc05bc 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -32,6 +32,7 @@
 #include <hal/libhal.h>
 #include <string.h>
 #include <sys/select.h>
+#include <unistd.h>
 
 #include "input.h"
 #include "inputstr.h"
@@ -475,6 +476,10 @@ connect_hook(DBusConnection *connection, void *data)
     char **devices;
     int num_devices, i;
 
+    /* hald might not finish it's init yet, we'll wait for it for 2s */
+    unsigned int wait_for_hal = 2 * 1000000;
+    const unsigned int wait_for_hal_sleep_time = 100 * 1000;
+
     info->system_bus = connection;
 
     dbus_error_init(&error);
@@ -490,11 +495,22 @@ connect_hook(DBusConnection *connection, void *data)
         LogMessage(X_ERROR, "config/hal: couldn't associate HAL context with 
bus\n");
         goto out_ctx;
     }
-    if (!libhal_ctx_init(info->hal_ctx, &error)) {
-        LogMessage(X_ERROR, "config/hal: couldn't initialise context: %s 
(%s)\n",
-               error.name, error.message);
-        goto out_ctx;
+
+    /* hald might not be ready now, waiting for it for a few seconds */
+    while (wait_for_hal >= wait_for_hal_sleep_time)
+    {
+           if (libhal_ctx_init(info->hal_ctx, &error))
+                   goto ctx_init_done;
+
+           LogMessage(X_INFO, "config/hal: waiting for hald...\n");
+           usleep (wait_for_hal_sleep_time);
+           wait_for_hal -= wait_for_hal_sleep_time;
     }
+    LogMessage(X_ERROR, "config/hal: couldn't initialise context: %s (%s)\n",
+               error.name, error.message);
+    goto out_ctx;
+
+ctx_init_done:
     if (!libhal_device_property_watch_all(info->hal_ctx, &error)) {
         LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s 
(%s)\n",
                error.name, error.message);
-- 
1.5.6.5


-- 
Li, Yan

Attachment: signature.asc
Description: Digital signature

_______________________________________________
xorg mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to