Commit 11015f16 authored by Allison Karlitskaya's avatar Allison Karlitskaya

windows XP threads: fix hilariously obvious race

I tried to do a double-checked lock without the double check.

Rodrigo Rivas Costa caught the problem and suggested the (obviously
correct) fix.

https://bugzilla.gnome.org/show_bug.cgi?id=666296
parent fcc9902e
......@@ -611,15 +611,20 @@ g_thread_xp_get_srwlock (GThreadSRWLock * volatile *lock)
{
EnterCriticalSection (&g_thread_xp_lock);
result = malloc (sizeof (GThreadSRWLock));
/* Check again */
result = *lock;
if (result == NULL)
g_thread_abort (errno, "malloc");
{
result = malloc (sizeof (GThreadSRWLock));
InitializeCriticalSection (&result->writer_lock);
result->writer_locked = FALSE;
result->ever_shared = FALSE;
*lock = result;
if (result == NULL)
g_thread_abort (errno, "malloc");
InitializeCriticalSection (&result->writer_lock);
result->writer_locked = FALSE;
result->ever_shared = FALSE;
*lock = result;
}
LeaveCriticalSection (&g_thread_xp_lock);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment