Free local FcCache lock on contention
If two threads attempt to create the FcCache lock in lock_cache at the same time, both threads may create and initialize a local FcMutex. One thread will atomically make cache_lock point to its FcMutex. The other thread currently calls FcMutexFinish on the local lock, but does not free it. Change this behavior to free the unused lock. Found with test/test-pthread on an LeakSanitizer enabled build.
This commit is contained in:
parent
6e68763085
commit
efc71a3c13
|
@ -495,6 +495,7 @@ retry:
|
|||
FcMutexInit (lock);
|
||||
if (!fc_atomic_ptr_cmpexch (&cache_lock, NULL, lock)) {
|
||||
FcMutexFinish (lock);
|
||||
free (lock);
|
||||
goto retry;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue