* 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:
Christopher Faylor
2005-03-08 05:05:02 +00:00
parent 4534561877
commit 18edcecfbf
5 changed files with 30 additions and 23 deletions

View File

@@ -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;
}