NetworkManager r3857 - in trunk: . src src/dnsmasq-manager src/ppp-manager
- From: dcbw svn gnome org
- To: svn-commits-list gnome org
- Subject: NetworkManager r3857 - in trunk: . src src/dnsmasq-manager src/ppp-manager
- Date: Sun, 27 Jul 2008 19:42:54 +0000 (UTC)
Author: dcbw
Date: Sun Jul 27 19:42:54 2008
New Revision: 3857
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=3857&view=rev
Log:
2008-07-27 Dan Williams <dcbw redhat com>
* src/dnsmasq-manager/nm-dnsmasq-manager.c
src/nm-device.c
src/ppp-manager/nm-ppp-manager.c
- Ensure child process gets reaped. The child watch function may be
removed from the mainloop before the child gets killed, so we have
to make sure the child is reaped when it's told to die intentionally
Modified:
trunk/ChangeLog
trunk/src/dnsmasq-manager/nm-dnsmasq-manager.c
trunk/src/nm-device.c
trunk/src/ppp-manager/nm-ppp-manager.c
Modified: trunk/src/dnsmasq-manager/nm-dnsmasq-manager.c
==============================================================================
--- trunk/src/dnsmasq-manager/nm-dnsmasq-manager.c (original)
+++ trunk/src/dnsmasq-manager/nm-dnsmasq-manager.c Sun Jul 27 19:42:54 2008
@@ -357,7 +357,6 @@
NMDnsMasqManagerPrivate *priv;
NMCmdLine *dm_cmd;
char *cmd_str;
- GSource *dm_watch;
g_return_val_if_fail (NM_IS_DNSMASQ_MANAGER (manager), FALSE);
if (error)
@@ -389,11 +388,7 @@
nm_debug ("dnsmasq started with pid %d", priv->pid);
- dm_watch = g_child_watch_source_new (priv->pid);
- g_source_set_callback (dm_watch, (GSourceFunc) dm_watch_cb, manager, NULL);
- g_source_attach (dm_watch, NULL);
- priv->dm_watch_id = g_source_get_id (dm_watch);
- g_source_unref (dm_watch);
+ priv->dm_watch_id = g_child_watch_add (priv->pid, (GChildWatchFunc) dm_watch_cb, manager);
out:
if (dm_cmd)
@@ -410,6 +405,9 @@
if (kill (pid, 0) == 0)
kill (pid, SIGKILL);
+ /* ensure child is reaped */
+ waitpid (pid, NULL, WNOHANG);
+
return FALSE;
}
@@ -433,6 +431,8 @@
else
kill (priv->pid, SIGKILL);
+ /* ensure child is reaped */
+ waitpid (priv->pid, NULL, WNOHANG);
priv->pid = 0;
}
Modified: trunk/src/nm-device.c
==============================================================================
--- trunk/src/nm-device.c (original)
+++ trunk/src/nm-device.c Sun Jul 27 19:42:54 2008
@@ -551,16 +551,18 @@
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- if (priv->aipd_pid > 0) {
- kill (priv->aipd_pid, SIGKILL);
- priv->aipd_pid = -1;
- }
-
if (priv->aipd_watch) {
g_source_remove (priv->aipd_watch);
priv->aipd_watch = 0;
}
+ if (priv->aipd_pid > 0) {
+ kill (priv->aipd_pid, SIGKILL);
+ /* Ensure child is reaped */
+ waitpid (priv->aipd_pid, NULL, WNOHANG);
+ priv->aipd_pid = -1;
+ }
+
aipd_timeout_remove (self);
priv->aipd_addr = 0;
Modified: trunk/src/ppp-manager/nm-ppp-manager.c
==============================================================================
--- trunk/src/ppp-manager/nm-ppp-manager.c (original)
+++ trunk/src/ppp-manager/nm-ppp-manager.c Sun Jul 27 19:42:54 2008
@@ -737,7 +737,6 @@
NMSettingPPPOE *pppoe_setting;
NMCmdLine *ppp_cmd;
char *cmd_str;
- GSource *ppp_watch;
g_return_val_if_fail (NM_IS_PPP_MANAGER (manager), FALSE);
g_return_val_if_fail (device != NULL, FALSE);
@@ -775,12 +774,7 @@
nm_debug ("ppp started with pid %d", priv->pid);
- ppp_watch = g_child_watch_source_new (priv->pid);
- g_source_set_callback (ppp_watch, (GSourceFunc) ppp_watch_cb, manager, NULL);
- g_source_attach (ppp_watch, NULL);
- priv->ppp_watch_id = g_source_get_id (ppp_watch);
- g_source_unref (ppp_watch);
-
+ priv->ppp_watch_id = g_child_watch_add (priv->pid, (GChildWatchFunc) ppp_watch_cb, manager);
priv->ppp_timeout_handler = g_timeout_add (NM_PPP_WAIT_PPPD, pppd_timed_out, manager);
priv->act_req = g_object_ref (req);
@@ -842,6 +836,9 @@
if (kill (pid, 0) == 0)
kill (pid, SIGKILL);
+ /* ensure the child is reaped */
+ waitpid (pid, NULL, WNOHANG);
+
return FALSE;
}
@@ -881,8 +878,11 @@
if (priv->pid) {
if (kill (priv->pid, SIGTERM) == 0)
g_timeout_add (2000, ensure_killed, GINT_TO_POINTER (priv->pid));
- else
+ else {
kill (priv->pid, SIGKILL);
+ /* ensure the child is reaped */
+ waitpid (priv->pid, NULL, WNOHANG);
+ }
priv->pid = 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]