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:
Ben Wagner 2021-08-31 12:47:48 -04:00 committed by Akira TAGOH
parent 6e68763085
commit efc71a3c13
1 changed files with 1 additions and 0 deletions

View File

@ -495,6 +495,7 @@ retry:
FcMutexInit (lock);
if (!fc_atomic_ptr_cmpexch (&cache_lock, NULL, lock)) {
FcMutexFinish (lock);
free (lock);
goto retry;
}