Skip to content

Commit 63cf198

Browse files
committed
Fix for #617
1 parent 83d494e commit 63cf198

2 files changed

Lines changed: 17 additions & 5 deletions

File tree

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2026-06-16 Richard Frith-Macdonald <rfm@gnu.org>
2+
3+
* Source/NSLog.m: Fix race condition in lock setup reported by
4+
DTW-Thalion. Set up cached methods for lock before setting the
5+
variable itself.
6+
17
2026-06-13 Richard Frith-Macdonald <rfm@gnu.org>
28

39
* Headers/GNUstepBase/GSObjCRuntime.h:

Source/NSLog.m

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,22 @@
9999
NSRecursiveLock *
100100
GSLogLock()
101101
{
102-
if (myLock == nil)
102+
if (nil == myLock)
103103
{
104104
static gs_mutex_t setupLock = GS_MUTEX_INIT_STATIC;
105105

106106
GS_MUTEX_LOCK(setupLock);
107-
if (myLock == nil)
107+
if (nil == myLock)
108108
{
109-
myLock = [NSRecursiveLock new];
110-
lockImp = [myLock methodForSelector: @selector(lock)];
111-
unlockImp = [myLock methodForSelector: @selector(unlock)];
109+
NSRecursiveLock *tmp;
110+
111+
/* Avoid race condition by caching method implementations
112+
* before setting value in myLock
113+
*/
114+
tmp = [NSRecursiveLock new];
115+
lockImp = [tmp methodForSelector: @selector(lock)];
116+
unlockImp = [tmp methodForSelector: @selector(unlock)];
117+
myLock = tmp;
112118
}
113119
GS_MUTEX_UNLOCK(setupLock);
114120
}

0 commit comments

Comments
 (0)