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
static of_tlskey_t threadSelfKey;
static OFThread *mainThread;

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


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

	thread->_pool = objc_autoreleasePoolPush();







	/*
	 * 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];







>







>
>
>
>
>
>







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

	_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];








<
<
<
<
<







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];
	}





}

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