From 18edcecfbf74f23bffeefcaca1722407f6a9f597 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Tue, 8 Mar 2005 05:05:02 +0000 Subject: * dcrt0.cc (dll_crt0_0): Eliminate muto::init call. * sync.h (locker): New, currently unused class. (muto::init): Eliminate. * sync.cc (muto::init): Ditto. (muto::init): Eliminate critical section lock and instead use name as a guard to prevent against multiple attempts to initialize the same muto. * pinfo.cc (pinfo::init): Set myself procinfo when not execing and pid matches windows pid or cygwin pid. --- winsup/cygwin/sync.cc | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) (limited to 'winsup/cygwin/sync.cc') diff --git a/winsup/cygwin/sync.cc b/winsup/cygwin/sync.cc index f946bc705..20995da2d 100644 --- a/winsup/cygwin/sync.cc +++ b/winsup/cygwin/sync.cc @@ -30,12 +30,6 @@ details. */ DWORD NO_COPY muto::exiting_thread; CRITICAL_SECTION NO_COPY muto::init_lock; -void -muto::init () -{ - InitializeCriticalSection (&init_lock); -} - void muto::grab () { @@ -46,23 +40,19 @@ muto::grab () muto * muto::init (const char *s) { - muto *res = this; - EnterCriticalSection (&init_lock); - if (!bruteforce) + char *already_exists = (char *) InterlockedExchangePointer (&name, s); + if (already_exists) + while (!bruteforce) + low_priority_sleep (0); + else { waiters = -1; - bruteforce = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL); /* Create event which is used in the fallback case when blocking is necessary */ - if (bruteforce) - name = s; - else - { - DWORD oerr = GetLastError (); - SetLastError (oerr); - res = NULL; - } + bruteforce = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL); + if (!bruteforce) + api_fatal ("couldn't allocate muto '%s', %E", s); } - LeaveCriticalSection (&init_lock); + return this; } -- cgit v1.2.3