2005-09-01 Dan Williams <dcbw@redhat.com>

* src/NetworkManager.c
		- (nm_remove_device_from_list): rename to nm_remove_device
		- (nm_hal_device_removed): call nm_remove_device()

	* src/NetworkManagerDevice.c
		- Change the NMWirelessScanCB member 'reschedule' which
			wasn't used to 'force' to indicate that we need to
			force a scan when adding a device

	* src/nm-dbus-nm.c
		- (nm_dbus_nm_sleep): Deactivate all devices and remove them
			from the device list
		- (nm_dbus_nm_wake): Re-add all devices to the device list


git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@926 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams
2005-09-02 03:47:19 +00:00
parent 714254d798
commit 976302b396
5 changed files with 57 additions and 57 deletions

View File

@@ -1,3 +1,19 @@
2005-09-01 Dan Williams <dcbw@redhat.com>
* src/NetworkManager.c
- (nm_remove_device_from_list): rename to nm_remove_device
- (nm_hal_device_removed): call nm_remove_device()
* src/NetworkManagerDevice.c
- Change the NMWirelessScanCB member 'reschedule' which
wasn't used to 'force' to indicate that we need to
force a scan when adding a device
* src/nm-dbus-nm.c
- (nm_dbus_nm_sleep): Deactivate all devices and remove them
from the device list
- (nm_dbus_nm_wake): Re-add all devices to the device list
2005-09-01 Robert Love <rml@novell.com> 2005-09-01 Robert Love <rml@novell.com>
* gnome/applet/applet.c: nmwa_update_info: iface is used uninitialized * gnome/applet/applet.c: nmwa_update_info: iface is used uninitialized

View File

@@ -152,45 +152,25 @@ NMDevice * nm_create_device_and_add_to_list (NMData *data, const char *udi, cons
/* /*
* nm_remove_device_from_list * nm_remove_device
* *
* Searches for a device entry in the NLM device list by udi, * Removes a particular device from the device list. Requires that
* and if found, removes that element from the list and frees * the device list is locked, if needed.
* its data.
*/ */
void nm_remove_device_from_list (NMData *data, const char *udi) void nm_remove_device (NMData *data, NMDevice *dev)
{ {
g_return_if_fail (data != NULL); g_return_if_fail (data != NULL);
g_return_if_fail (udi != NULL); g_return_if_fail (dev != NULL);
/* Attempt to acquire mutex for device list deletion. If acquire fails, nm_device_set_removed (dev, TRUE);
* just ignore the device deletion entirely. nm_device_deactivate (dev);
*/ nm_device_worker_thread_stop (dev);
if (nm_try_acquire_mutex (data->dev_list_mutex, __FUNCTION__)) nm_dbus_schedule_device_status_change_signal (data, dev, NULL, DEVICE_REMOVED);
{
GSList *elt;
for (elt = data->dev_list; elt; elt = g_slist_next (elt))
{
NMDevice *dev = (NMDevice *)(elt->data);
if (dev && (nm_null_safe_strcmp (nm_device_get_udi (dev), udi) == 0)) nm_device_unref (dev);
{
nm_device_set_removed (dev, TRUE);
nm_device_deactivate (dev);
nm_device_worker_thread_stop (dev);
nm_dbus_schedule_device_status_change_signal (data, dev, NULL, DEVICE_REMOVED);
nm_device_unref (dev); /* Remove the device entry from the device list and free its data */
data->dev_list = g_slist_remove (data->dev_list, dev);
/* Remove the device entry from the device list and free its data */
data->dev_list = g_slist_remove_link (data->dev_list, elt);
g_slist_free (elt);
nm_policy_schedule_device_change_check (data);
break;
}
}
nm_unlock_mutex (data->dev_list_mutex, __FUNCTION__);
} else nm_warning ("could not acquire device list mutex." );
} }
@@ -267,12 +247,22 @@ static void nm_hal_device_added (LibHalContext *ctx, const char *udi)
static void nm_hal_device_removed (LibHalContext *ctx, const char *udi) static void nm_hal_device_removed (LibHalContext *ctx, const char *udi)
{ {
NMData *data = (NMData *)libhal_ctx_get_user_data (ctx); NMData *data = (NMData *)libhal_ctx_get_user_data (ctx);
NMDevice *dev;
g_return_if_fail (data != NULL); g_return_if_fail (data != NULL);
nm_debug ("Device removed (hal udi is '%s').", udi ); nm_debug ("Device removed (hal udi is '%s').", udi );
nm_remove_device_from_list (data, udi); if (!nm_try_acquire_mutex (data->dev_list_mutex, __FUNCTION__))
return;
if ((dev = nm_get_device_by_udi (data, udi)))
{
nm_remove_device (data, dev);
nm_policy_schedule_device_change_check (data);
}
nm_unlock_mutex (data->dev_list_mutex, __FUNCTION__);
} }
@@ -307,7 +297,7 @@ static void nm_hal_device_new_capability (LibHalContext *ctx, const char *udi, c
* Add all devices that hal knows about right now (ie not hotplug devices) * Add all devices that hal knows about right now (ie not hotplug devices)
* *
*/ */
static void nm_add_initial_devices (NMData *data) void nm_add_initial_devices (NMData *data)
{ {
char ** net_devices; char ** net_devices;
int num_net_devices; int num_net_devices;

View File

@@ -65,8 +65,8 @@ typedef struct
typedef struct typedef struct
{ {
NMDevice *dev; NMDevice * dev;
gboolean reschedule; gboolean force;
} NMWirelessScanCB; } NMWirelessScanCB;
/******************************************************/ /******************************************************/
@@ -498,7 +498,7 @@ static gpointer nm_device_worker (gpointer user_data)
scan_cb = g_malloc0 (sizeof (NMWirelessScanCB)); scan_cb = g_malloc0 (sizeof (NMWirelessScanCB));
scan_cb->dev = dev; scan_cb->dev = dev;
scan_cb->reschedule = TRUE; scan_cb->force = TRUE;
g_source_set_callback (source, nm_device_wireless_scan, scan_cb, NULL); g_source_set_callback (source, nm_device_wireless_scan, scan_cb, NULL);
source_id = g_source_attach (source, dev->context); source_id = g_source_attach (source, dev->context);
@@ -3688,7 +3688,7 @@ static void nm_device_wireless_schedule_scan (NMDevice *dev)
scan_cb = g_malloc0 (sizeof (NMWirelessScanCB)); scan_cb = g_malloc0 (sizeof (NMWirelessScanCB));
scan_cb->dev = dev; scan_cb->dev = dev;
scan_cb->reschedule = TRUE; scan_cb->force = FALSE;
wscan_source = g_timeout_source_new (dev->options.wireless.scan_interval * 1000); wscan_source = g_timeout_source_new (dev->options.wireless.scan_interval * 1000);
g_source_set_callback (wscan_source, nm_device_wireless_scan, scan_cb, NULL); g_source_set_callback (wscan_source, nm_device_wireless_scan, scan_cb, NULL);
@@ -3952,9 +3952,10 @@ static gboolean nm_device_wireless_scan (gpointer user_data)
/* Reschedule if scanning is off, or if scanning is AUTO and we are /* Reschedule if scanning is off, or if scanning is AUTO and we are
* associated to an access point. * associated to an access point.
*/ */
if ( (dev->app_data->scanning_method == NM_SCAN_METHOD_NEVER) if ( ((dev->app_data->scanning_method == NM_SCAN_METHOD_NEVER)
|| ( (dev->app_data->scanning_method == NM_SCAN_METHOD_WHEN_UNASSOCIATED) || ( (dev->app_data->scanning_method == NM_SCAN_METHOD_WHEN_UNASSOCIATED)
&& nm_device_is_activated (dev))) && nm_device_is_activated (dev)))
&& !scan_cb->force)
{ {
dev->options.wireless.scan_interval = 10; dev->options.wireless.scan_interval = 10;
goto reschedule; goto reschedule;
@@ -4067,8 +4068,7 @@ static gboolean nm_device_wireless_scan (gpointer user_data)
reschedule: reschedule:
/* Make sure we reschedule ourselves so we keep scanning */ /* Make sure we reschedule ourselves so we keep scanning */
if (scan_cb->reschedule) nm_device_wireless_schedule_scan (dev);
nm_device_wireless_schedule_scan (dev);
g_free (scan_cb); g_free (scan_cb);
return FALSE; return FALSE;

View File

@@ -97,7 +97,9 @@ struct NMDevice * nm_get_active_device (NMData *data);
struct NMDevice * nm_create_device_and_add_to_list (NMData *data, const char *udi, const char *iface, struct NMDevice * nm_create_device_and_add_to_list (NMData *data, const char *udi, const char *iface,
gboolean test_device, NMDeviceType test_device_type); gboolean test_device, NMDeviceType test_device_type);
void nm_remove_device_from_list (NMData *data, const char *udi); void nm_add_initial_devices (NMData *data);
void nm_remove_device (NMData *data, struct NMDevice *dev);
void nm_schedule_state_change_signal_broadcast (NMData *data); void nm_schedule_state_change_signal_broadcast (NMData *data);

View File

@@ -386,7 +386,7 @@ static DBusMessage *nm_dbus_nm_remove_test_device (DBusConnection *connection, D
if ((dev = nm_dbus_get_device_from_object_path (data->data, dev_path))) if ((dev = nm_dbus_get_device_from_object_path (data->data, dev_path)))
{ {
if (nm_device_is_test_device (dev)) if (nm_device_is_test_device (dev))
nm_remove_device_from_list (data->data, nm_device_get_udi (dev)); nm_remove_device (data->data, dev);
else else
reply = nm_dbus_create_error_message (message, NM_DBUS_INTERFACE, "NotTestDevice", reply = nm_dbus_create_error_message (message, NM_DBUS_INTERFACE, "NotTestDevice",
"Only test devices can be removed via dbus calls."); "Only test devices can be removed via dbus calls.");
@@ -488,14 +488,14 @@ static DBusMessage *nm_dbus_nm_sleep (DBusConnection *connection, DBusMessage *m
app_data->asleep = TRUE; app_data->asleep = TRUE;
/* Physically down all devices */ /* Remove all devices from the device list */
nm_lock_mutex (app_data->dev_list_mutex, __FUNCTION__); nm_lock_mutex (app_data->dev_list_mutex, __FUNCTION__);
for (elt = app_data->dev_list; elt; elt = g_slist_next (elt)) while (g_slist_length (app_data->dev_list))
{ {
NMDevice *dev = (NMDevice *)(elt->data); NMDevice *dev = (NMDevice *)(app_data->dev_list->data);
nm_device_deactivate (dev); fprintf (stderr, "dev %p\n", dev);
nm_device_bring_down (dev); nm_remove_device (app_data, dev);
} }
nm_unlock_mutex (app_data->dev_list_mutex, __FUNCTION__); nm_unlock_mutex (app_data->dev_list_mutex, __FUNCTION__);
@@ -523,15 +523,7 @@ static DBusMessage *nm_dbus_nm_wake (DBusConnection *connection, DBusMessage *me
nm_info ("Waking up from sleep."); nm_info ("Waking up from sleep.");
app_data->asleep = FALSE; app_data->asleep = FALSE;
/* Physically up all devices */ nm_add_initial_devices (app_data);
nm_lock_mutex (app_data->dev_list_mutex, __FUNCTION__);
for (elt = app_data->dev_list; elt; elt = g_slist_next (elt))
{
NMDevice *dev = (NMDevice *)(elt->data);
nm_device_bring_up (dev);
}
nm_unlock_mutex (app_data->dev_list_mutex, __FUNCTION__);
nm_schedule_state_change_signal_broadcast (app_data); nm_schedule_state_change_signal_broadcast (app_data);
nm_policy_schedule_device_change_check (data->data); nm_policy_schedule_device_change_check (data->data);