NetworkManager r3682 - in trunk/vpn-daemons: openvpn openvpn/src vpnc vpnc/src



Author: tambeti
Date: Thu May 22 14:32:44 2008
New Revision: 3682
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=3682&view=rev

Log:
2008-05-22  Tambet Ingo  <tambet gmail com>

	* src/nm-vpnc-service.c (real_disconnect): If sending SIGTERM succeeds,
	add a timeout to make sure it gets killed. If it fails, send SIGKILL
	immediately.

	* src/nm-openvpn-service.c (real_disconnect): If sending SIGTERM
	succeeds, add a timeout to make sure it gets killed. If it fails,
	send SIGKILL immediately.


Modified:
   trunk/vpn-daemons/openvpn/ChangeLog
   trunk/vpn-daemons/openvpn/src/nm-openvpn-service.c
   trunk/vpn-daemons/vpnc/ChangeLog
   trunk/vpn-daemons/vpnc/src/nm-vpnc-service.c

Modified: trunk/vpn-daemons/openvpn/src/nm-openvpn-service.c
==============================================================================
--- trunk/vpn-daemons/openvpn/src/nm-openvpn-service.c	(original)
+++ trunk/vpn-daemons/openvpn/src/nm-openvpn-service.c	Thu May 22 14:32:44 2008
@@ -710,13 +710,28 @@
 }
 
 static gboolean
-real_disconnect (NMVPNPlugin   *plugin,
-			  GError       **err)
+ensure_killed (gpointer data)
+{
+	int pid = GPOINTER_TO_INT (data);
+
+	if (kill (pid, 0) == 0)
+		kill (pid, SIGKILL);
+
+	return FALSE;
+}
+
+static gboolean
+real_disconnect (NMVPNPlugin	 *plugin,
+			  GError		**err)
 {
 	NMOpenvpnPluginPrivate *priv = NM_OPENVPN_PLUGIN_GET_PRIVATE (plugin);
 
 	if (priv->pid) {
-		kill (priv->pid, SIGTERM);
+		if (kill (priv->pid, SIGTERM) == 0)
+			g_timeout_add (2000, ensure_killed, GINT_TO_POINTER (priv->pid));
+		else
+			kill (priv->pid, SIGKILL);
+
 		nm_info ("Terminated openvpn daemon with PID %d.", priv->pid);
 		priv->pid = 0;
 	}

Modified: trunk/vpn-daemons/vpnc/src/nm-vpnc-service.c
==============================================================================
--- trunk/vpn-daemons/vpnc/src/nm-vpnc-service.c	(original)
+++ trunk/vpn-daemons/vpnc/src/nm-vpnc-service.c	Thu May 22 14:32:44 2008
@@ -352,13 +352,28 @@
 }
 
 static gboolean
+ensure_killed (gpointer data)
+{
+	int pid = GPOINTER_TO_INT (data);
+
+	if (kill (pid, 0) == 0)
+		kill (pid, SIGKILL);
+
+	return FALSE;
+}
+
+static gboolean
 real_disconnect (NMVPNPlugin   *plugin,
 			  GError       **err)
 {
 	NMVPNCPluginPrivate *priv = NM_VPNC_PLUGIN_GET_PRIVATE (plugin);
 
 	if (priv->pid) {
-		kill (priv->pid, SIGTERM);
+		if (kill (priv->pid, SIGTERM) == 0)
+			g_timeout_add (2000, ensure_killed, GINT_TO_POINTER (priv->pid));
+		else
+			kill (priv->pid, SIGKILL);
+
 		nm_info ("Terminated vpnc daemon with PID %d.", priv->pid);
 		priv->pid = 0;
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]