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 <selva.nair@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
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 <gert@greenie.muc.de>
... | ... |
@@ -105,7 +105,6 @@ init_win32 (void) |
105 | 105 |
} |
106 | 106 |
window_title_clear (&window_title); |
107 | 107 |
win32_signal_clear (&win32_signal); |
108 |
- netcmd_semaphore_init (); |
|
109 | 108 |
} |
110 | 109 |
|
111 | 110 |
void |
... | ... |
@@ -751,6 +750,10 @@ void |
751 | 751 |
netcmd_semaphore_lock (void) |
752 | 752 |
{ |
753 | 753 |
const int timeout_seconds = 600; |
754 |
+ |
|
755 |
+ if (!netcmd_semaphore.hand) |
|
756 |
+ netcmd_semaphore_init (); |
|
757 |
+ |
|
754 | 758 |
if (!semaphore_lock (&netcmd_semaphore, timeout_seconds * 1000)) |
755 | 759 |
msg (M_FATAL, "Cannot lock net command semaphore"); |
756 | 760 |
} |
... | ... |
@@ -759,6 +762,8 @@ void |
759 | 759 |
netcmd_semaphore_release (void) |
760 | 760 |
{ |
761 | 761 |
semaphore_release (&netcmd_semaphore); |
762 |
+ /* netcmd_semaphore has max count of 1 - safe to close after release */ |
|
763 |
+ semaphore_close (&netcmd_semaphore); |
|
762 | 764 |
} |
763 | 765 |
|
764 | 766 |
/* |