Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
NetworkManager
NetworkManager
Commits
18f819d7
Commit
18f819d7
authored
Oct 27, 2010
by
Dan Williams
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
policy: clean up device signal handling
parent
6329fadb
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
43 deletions
+22
-43
src/nm-policy.c
src/nm-policy.c
+22
-43
No files found.
src/nm-policy.c
View file @
18f819d7
...
...
@@ -51,7 +51,7 @@ struct NMPolicy {
GSList
*
pending_activation_checks
;
GSList
*
manager_ids
;
GSList
*
settings_ids
;
GSList
*
dev_
signal_
ids
;
GSList
*
dev_ids
;
NMVPNManager
*
vpn_manager
;
gulong
vpn_activated_id
;
...
...
@@ -948,53 +948,32 @@ wireless_networks_changed (NMDeviceWifi *device, NMAccessPoint *ap, gpointer use
typedef
struct
{
gulong
id
;
NMDevice
*
device
;
}
DeviceSignalI
D
;
}
DeviceSignalI
d
;
static
GSList
*
add
_device_signal
_id
(
GSList
*
list
,
gulong
id
,
NMDevice
*
device
)
static
void
_connect
_device_signal
(
NMPolicy
*
policy
,
NMDevice
*
device
,
const
char
*
name
,
gpointer
callback
)
{
DeviceSignalID
*
data
;
data
=
g_malloc0
(
sizeof
(
DeviceSignalID
));
if
(
!
data
)
return
list
;
DeviceSignalId
*
data
;
data
->
id
=
id
;
data
=
g_slice_new0
(
DeviceSignalId
);
g_assert
(
data
);
data
->
id
=
g_signal_connect
(
device
,
name
,
callback
,
policy
);
data
->
device
=
device
;
return
g_slist_
a
ppend
(
list
,
data
);
policy
->
dev_ids
=
g_slist_p
re
pend
(
policy
->
dev_ids
,
data
);
}
static
void
device_added
(
NMManager
*
manager
,
NMDevice
*
device
,
gpointer
user_data
)
{
NMPolicy
*
policy
=
(
NMPolicy
*
)
user_data
;
gulong
id
;
id
=
g_signal_connect
(
device
,
"state-changed"
,
G_CALLBACK
(
device_state_changed
),
policy
);
policy
->
dev_signal_ids
=
add_device_signal_id
(
policy
->
dev_signal_ids
,
id
,
device
);
id
=
g_signal_connect
(
device
,
"notify::"
NM_DEVICE_INTERFACE_IP4_CONFIG
,
G_CALLBACK
(
device_ip_config_changed
),
policy
);
policy
->
dev_signal_ids
=
add_device_signal_id
(
policy
->
dev_signal_ids
,
id
,
device
);
id
=
g_signal_connect
(
device
,
"notify::"
NM_DEVICE_INTERFACE_IP6_CONFIG
,
G_CALLBACK
(
device_ip_config_changed
),
policy
);
policy
->
dev_signal_ids
=
add_device_signal_id
(
policy
->
dev_signal_ids
,
id
,
device
);
_connect_device_signal
(
policy
,
device
,
"state-changed"
,
device_state_changed
);
_connect_device_signal
(
policy
,
device
,
"notify::"
NM_DEVICE_INTERFACE_IP4_CONFIG
,
device_ip_config_changed
);
_connect_device_signal
(
policy
,
device
,
"notify::"
NM_DEVICE_INTERFACE_IP6_CONFIG
,
device_ip_config_changed
);
if
(
NM_IS_DEVICE_WIFI
(
device
))
{
id
=
g_signal_connect
(
device
,
"access-point-added"
,
G_CALLBACK
(
wireless_networks_changed
),
policy
);
policy
->
dev_signal_ids
=
add_device_signal_id
(
policy
->
dev_signal_ids
,
id
,
device
);
id
=
g_signal_connect
(
device
,
"access-point-removed"
,
G_CALLBACK
(
wireless_networks_changed
),
policy
);
policy
->
dev_signal_ids
=
add_device_signal_id
(
policy
->
dev_signal_ids
,
id
,
device
);
_connect_device_signal
(
policy
,
device
,
"access-point-added"
,
wireless_networks_changed
);
_connect_device_signal
(
policy
,
device
,
"access-point-removed"
,
wireless_networks_changed
);
}
}
...
...
@@ -1020,15 +999,15 @@ device_removed (NMManager *manager, NMDevice *device, gpointer user_data)
}
/* Clear any signal handlers for this device */
iter
=
policy
->
dev_
signal_
ids
;
iter
=
policy
->
dev_ids
;
while
(
iter
)
{
DeviceSignalI
D
*
data
=
(
DeviceSignalID
*
)
iter
->
data
;
DeviceSignalI
d
*
data
=
iter
->
data
;
GSList
*
next
=
g_slist_next
(
iter
);
if
(
data
->
device
==
device
)
{
g_signal_handler_disconnect
(
data
->
device
,
data
->
id
);
g_
free
(
data
);
policy
->
dev_
signal_
ids
=
g_slist_delete_link
(
policy
->
dev_
signal_
ids
,
iter
);
g_
slice_free
(
DeviceSignalId
,
data
);
policy
->
dev_ids
=
g_slist_delete_link
(
policy
->
dev_ids
,
iter
);
}
iter
=
next
;
}
...
...
@@ -1220,13 +1199,13 @@ nm_policy_destroy (NMPolicy *policy)
g_signal_handler_disconnect
(
policy
->
settings
,
GPOINTER_TO_UINT
(
iter
->
data
));
g_slist_free
(
policy
->
settings_ids
);
for
(
iter
=
policy
->
dev_
signal_
ids
;
iter
;
iter
=
g_slist_next
(
iter
))
{
DeviceSignalI
D
*
data
=
(
DeviceSignalID
*
)
iter
->
data
;
for
(
iter
=
policy
->
dev_ids
;
iter
;
iter
=
g_slist_next
(
iter
))
{
DeviceSignalI
d
*
data
=
iter
->
data
;
g_signal_handler_disconnect
(
data
->
device
,
data
->
id
);
g_
free
(
data
);
g_
slice_free
(
DeviceSignalId
,
data
);
}
g_slist_free
(
policy
->
dev_
signal_
ids
);
g_slist_free
(
policy
->
dev_ids
);
/* Rewrite /etc/hosts on exit to ensure we don't leave stale IP addresses
* lying around. FIXME: this will take out a valid IP address of an
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment