ObjFW  Check-in [1a502ac38c]

Overview
Comment:OFThread: Fix setting the name on the wrong thread

This time for real.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | 0.90
Files: files | file ages | folders
SHA3-256: 1a502ac38cbd3788840abff09152286d767e9fe0306f8bfb87707f68295ad8a1
User & Date: js on 2017-10-07 15:14:19
Other Links: branch diff | manifest | tags
Context
2017-10-11
20:59
Fix shadowed variables and enable -Wshadow check-in: 836314f39a user: js tags: 0.90
2017-10-07
15:14
OFThread: Fix setting the name on the wrong thread check-in: 1a502ac38c user: js tags: 0.90
11:22
OFThread: Fix the name accidentally being readonly check-in: 83c4d83c7d user: js tags: 0.90
Changes

Modified src/OFThread.m from [e0cab8357e] to [3fc1c7c412].

93
94
95
96
97
98
99

100
101
102
103
104
105
106






107
108
109
110
111
112
113
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120







+







+
+
+
+
+
+







static of_tlskey_t threadSelfKey;
static OFThread *mainThread;

static void
callMain(id object)
{
	OFThread *thread = (OFThread *)object;
	OFString *name;

	if (!of_tlskey_set(threadSelfKey, thread))
		@throw [OFInitializationFailedException
		    exceptionWithClass: [thread class]];

	thread->_pool = objc_autoreleasePoolPush();

	name = [thread name];
	if (name != nil)
		of_thread_set_name([name UTF8String]);
	else
		of_thread_set_name(object_getClassName(thread));

	/*
	 * Nasty workaround for thread implementations which can't return a
	 * pointer on join.
	 */
# ifdef OF_HAVE_BLOCKS
	if (thread->_threadBlock != NULL)
		thread->_returnValue = [thread->_threadBlock() retain];
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
353
354
355
356
357
358
359





360
361
362
363
364
365
366







-
-
-
-
-








	_running = OF_THREAD_RUNNING;

	if (!of_thread_new(&_thread, callMain, self, &_attr)) {
		[self release];
		@throw [OFThreadStartFailedException exceptionWithThread: self];
	}

	if (_name != nil)
		of_thread_set_name([_name UTF8String]);
	else
		of_thread_set_name(class_getName([self class]));
}

- (id)join
{
	if (_running == OF_THREAD_NOT_RUNNING || !of_thread_join(_thread))
		@throw [OFThreadJoinFailedException exceptionWithThread: self];