From 13f3526a9b05bed63c50c93c5903b0cde0dcc7f4 Mon Sep 17 00:00:00 2001 From: Selva Nair Date: Mon, 13 Jun 2016 22:34:49 -0400 Subject: [PATCH] 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 (cherry picked from commit 6aa4c9091300f62fae0bf7a9198de0edd2d8b7c7) --- src/openvpn/win32.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/openvpn/win32.c b/src/openvpn/win32.c index e17cca1ef..4f2df14bb 100644 --- a/src/openvpn/win32.c +++ b/src/openvpn/win32.c @@ -119,7 +119,6 @@ init_win32 (void) } window_title_clear (&window_title); win32_signal_clear (&win32_signal); - netcmd_semaphore_init (); } void @@ -765,6 +764,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"); } @@ -773,6 +776,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); } /* -- 2.47.2