* 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.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user