On Wed, Jan 21, 2009 at 06:09:48PM +0800, Yan Li wrote: > 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 I think it'd be better to set a timer to fire off the reinitialization rather than a simple usleep. Doing so allows us to finish the server initialization without having to wait for hal. Any opinions?
Cheers, Peter _______________________________________________ xorg mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/xorg
