diff --git a/NetworkManager/src/nm-device.c b/NetworkManager/src/nm-device.c index 9b20649..550bbff 100644 --- a/NetworkManager/src/nm-device.c +++ b/NetworkManager/src/nm-device.c @@ -559,7 +559,10 @@ aipd_cleanup (NMDevice *self) if (priv->aipd_pid > 0) { kill (priv->aipd_pid, SIGKILL); /* Ensure child is reaped */ - waitpid (priv->aipd_pid, NULL, WNOHANG); + nm_debug ("waiting for aipd pid %d to exit", priv->aipd_pid); + waitpid (priv->aipd_pid, NULL, 0); + nm_debug ("aipd pid %d cleaned up", priv->aipd_pid); + priv->aipd_pid = -1; } diff --git a/NetworkManager/src/ppp-manager/nm-ppp-manager.c b/NetworkManager/src/ppp-manager/nm-ppp-manager.c index 3eae667..88e7ade 100644 --- a/NetworkManager/src/ppp-manager/nm-ppp-manager.c +++ b/NetworkManager/src/ppp-manager/nm-ppp-manager.c @@ -675,7 +675,12 @@ ppp_watch_cb (GPid pid, gint status, gpointer user_data) g_warning ("ppp died from an unknown cause"); /* Reap child if needed. */ - waitpid (pid, NULL, WNOHANG); + if(priv->pid > 0) + { + nm_debug ("waiting for ppp pid %d to exit", priv->pid); + waitpid (priv->pid, NULL, 0); + nm_debug ("ppp pid %d cleaned up", priv->pid); + } priv->pid = 0; @@ -946,7 +951,12 @@ ensure_killed (gpointer data) kill (pid, SIGKILL); /* ensure the child is reaped */ - waitpid (pid, NULL, WNOHANG); + if(pid > 0) + { + nm_debug ("waiting for ppp pid %d to exit", pid); + waitpid (pid, NULL, 0); + nm_debug ("ppp pid %d cleaned up", pid); + } return FALSE; } @@ -988,7 +998,9 @@ nm_ppp_manager_stop (NMPPPManager *manager) else { kill (priv->pid, SIGKILL); /* ensure the child is reaped */ - waitpid (priv->pid, NULL, WNOHANG); + nm_debug ("waiting for ppp pid %d to exit", priv->pid); + waitpid (priv->pid, NULL, 0); + nm_debug ("ppp pid %d cleaned up", priv->pid); } priv->pid = 0; diff --git a/NetworkManager/src/vpn-manager/nm-vpn-service.c b/NetworkManager/src/vpn-manager/nm-vpn-service.c index 7fbe15f..8a0f9f8 100644 --- a/NetworkManager/src/vpn-manager/nm-vpn-service.c +++ b/NetworkManager/src/vpn-manager/nm-vpn-service.c @@ -208,7 +208,13 @@ vpn_service_watch_cb (GPid pid, gint status, gpointer user_data) nm_vpn_service_get_name (service)); /* Reap child if needed. */ - waitpid (pid, NULL, WNOHANG); + if(priv->pid > 0) + { + nm_debug ("waiting for vpn service pid %d to exit", priv->pid); + waitpid (priv->pid, NULL, 0); + nm_debug ("vpn service pid %d cleaned up", priv->pid); + } + priv->pid = 0; nm_vpn_service_connections_stop (service, TRUE, NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED);