From: Selva Nair Date: Tue, 14 Jun 2016 02:34:49 +0000 (-0400) Subject: Promptly close the netcmd_semaphore handle after use X-Git-Tag: v2.4_alpha1~57 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=6aa4c9091300f62fae0bf7a9198de0edd2d8b7c7;p=thirdparty%2Fopenvpn.git Promptly close the netcmd_semaphore handle after use If more than one openvpn processes are running and one aborts without releasing the semaphore, subsequent processes fail to get a lock for the semaphore. This may be avoided by not keeping open handles to the semaphore so that Windows can destroy it when no open handles remain. See also: http://article.gmane.org/gmane.network.openvpn.devel/11913 Signed-off-by: Selva Nair Acked-by: Gert Doering Message-Id: <1465871689-13533-1-git-send-email-selva.nair@gmail.com> URL: http://article.gmane.org/gmane.network.openvpn.devel/11919 Signed-off-by: Gert Doering --- diff --git a/src/openvpn/win32.c b/src/openvpn/win32.c index 8a2f95785..ad721cdb3 100644 --- a/src/openvpn/win32.c +++ b/src/openvpn/win32.c @@ -105,7 +105,6 @@ init_win32 (void) } window_title_clear (&window_title); win32_signal_clear (&win32_signal); - netcmd_semaphore_init (); } void @@ -751,6 +750,10 @@ void netcmd_semaphore_lock (void) { const int timeout_seconds = 600; + + if (!netcmd_semaphore.hand) + netcmd_semaphore_init (); + if (!semaphore_lock (&netcmd_semaphore, timeout_seconds * 1000)) msg (M_FATAL, "Cannot lock net command semaphore"); } @@ -759,6 +762,8 @@ void netcmd_semaphore_release (void) { semaphore_release (&netcmd_semaphore); + /* netcmd_semaphore has max count of 1 - safe to close after release */ + semaphore_close (&netcmd_semaphore); } /*