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
This commit is contained in:
Ryan Lortie 2011-12-15 13:27:27 -05:00
parent fcc9902e98
commit 11015f1652

View File

@ -611,6 +611,10 @@ g_thread_xp_get_srwlock (GThreadSRWLock * volatile *lock)
{
EnterCriticalSection (&g_thread_xp_lock);
/* Check again */
result = *lock;
if (result == NULL)
{
result = malloc (sizeof (GThreadSRWLock));
if (result == NULL)
@ -620,6 +624,7 @@ g_thread_xp_get_srwlock (GThreadSRWLock * volatile *lock)
result->writer_locked = FALSE;
result->ever_shared = FALSE;
*lock = result;
}
LeaveCriticalSection (&g_thread_xp_lock);
}