83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
-
+
|
#endif
thread->returnValue = [[thread main] retain];
[thread handleTermination];
thread->running = OF_THREAD_WAITING_FOR_JOIN;
[OFTLSKey callAllDestructors];
[OFTLSKey OF_callAllDestructors];
#ifdef OF_OBJFW_RUNTIME
/*
* As the values returned by objc_autoreleasePoolPush() in the ObjFW
* runtime are not actually pointers, but sequential numbers, 0 means
* we pop everything.
*/
objc_autoreleasePoolPop(0);
|
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
-
+
|
thread->returnValue = [object retain];
[thread handleTermination];
thread->running = OF_THREAD_WAITING_FOR_JOIN;
}
[OFTLSKey callAllDestructors];
[OFTLSKey OF_callAllDestructors];
#ifdef OF_OBJFW_RUNTIME
/*
* As the values returned by objc_autoreleasePoolPush() in the ObjFW
* runtime are not actually pointers, but sequential numbers, 0 means
* we pop everything.
*/
objc_autoreleasePoolPop(0);
|
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
|
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
|
-
+
|
}
+ (instancetype)TLSKeyWithDestructor: (void(*)(id))destructor
{
return [[[self alloc] initWithDestructor: destructor] autorelease];
}
+ (void)callAllDestructors
+ (void)OF_callAllDestructors
{
of_list_object_t *iter;
@synchronized (TLSKeys) {
for (iter = [TLSKeys firstListObject]; iter != NULL;
iter = iter->next) {
OFTLSKey *key = (OFTLSKey*)iter->object;
|