diff --git a/ChangeLog b/ChangeLog index 3c3b481efa..0b41b05ae1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-04-04 Dan Williams + + * src/nm-hal-manager.c + src/nm-hal-manager.h + - (hal_init): don't look for hardware here + - (nm_hal_manager_start): new function; look for hardware here instead, + which can be done at a later time than hal_init() + + * src/NetworkManager.c + - (main): start HAL manager after entering the main loop + 2008-04-03 Dan Williams * libnm-glib/nm-settings.c diff --git a/src/NetworkManager.c b/src/NetworkManager.c index 7c46cdff6d..048850c86e 100644 --- a/src/NetworkManager.c +++ b/src/NetworkManager.c @@ -205,6 +205,13 @@ write_pidfile (const char *pidfile) nm_warning ("Closing %s failed: %s", pidfile, strerror (errno)); } +static gboolean +start_hal (gpointer user_data) +{ + nm_hal_manager_start ((NMHalManager *) user_data); + return FALSE; +} + /* * main * @@ -343,6 +350,7 @@ main (int argc, char *argv[]) hal_manager = nm_hal_manager_new (manager); if (!hal_manager) goto done; + g_idle_add (start_hal, hal_manager); /* Bring up the loopback interface. */ nm_system_enable_loopback (); diff --git a/src/nm-hal-manager.c b/src/nm-hal-manager.c index 4daf363065..57cf555d0d 100644 --- a/src/nm-hal-manager.c +++ b/src/nm-hal-manager.c @@ -569,7 +569,6 @@ hal_init (NMHalManager *manager) { DBusError error; DBusGConnection *connection; - gboolean success = FALSE; manager->hal_ctx = libhal_ctx_new (); if (!manager->hal_ctx) { @@ -586,7 +585,7 @@ hal_init (NMHalManager *manager) nm_error ("libhal_ctx_init() failed: %s\n" "Make sure the hal daemon is running?", error.message); - goto out; + goto error; } libhal_ctx_set_user_data (manager->hal_ctx, manager); @@ -598,25 +597,19 @@ hal_init (NMHalManager *manager) if (dbus_error_is_set (&error)) { nm_error ("libhal_device_property_watch_all(): %s", error.message); libhal_ctx_shutdown (manager->hal_ctx, NULL); - goto out; + goto error; } - /* Add any devices we know about */ - add_killswitch_devices (manager); - add_initial_devices (manager); - success = TRUE; + return TRUE; -out: - if (!success) { - if (dbus_error_is_set (&error)) - dbus_error_free (&error); - if (manager->hal_ctx) { - libhal_ctx_free (manager->hal_ctx); - manager->hal_ctx = NULL; - } +error: + if (dbus_error_is_set (&error)) + dbus_error_free (&error); + if (manager->hal_ctx) { + libhal_ctx_free (manager->hal_ctx); + manager->hal_ctx = NULL; } - - return success; + return FALSE; } static void @@ -748,6 +741,14 @@ nm_hal_manager_new (NMManager *nm_manager) return manager; } +void +nm_hal_manager_start (NMHalManager *manager) +{ + /* Find hardware we care about */ + add_killswitch_devices (manager); + add_initial_devices (manager); +} + static void destroy_creator (gpointer data, gpointer user_data) { diff --git a/src/nm-hal-manager.h b/src/nm-hal-manager.h index 7b8a0e68cb..e94353f3c5 100644 --- a/src/nm-hal-manager.h +++ b/src/nm-hal-manager.h @@ -6,6 +6,7 @@ typedef struct _NMHalManager NMHalManager; NMHalManager *nm_hal_manager_new (NMManager *nm_manager); +void nm_hal_manager_start (NMHalManager *manager); void nm_hal_manager_destroy (NMHalManager *manager); #endif /* NM_HAL_MANAGER_H */