Overview
Comment: | Rename -[initWithBlock:].
It is now called -[initWithThreadBlock:] in order to prevent method This also fixes a missing release for the thread block. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
a3639589d336e55dcb290244362ee499 |
User & Date: | js on 2013-06-30 18:30:12 |
Other Links: | manifest | tags |
Context
2013-06-30
| ||
19:13 | configure: Check for dladdr(). check-in: e0f421b523 user: js tags: trunk | |
18:30 | Rename -[initWithBlock:]. check-in: a3639589d3 user: js tags: trunk | |
2013-06-28
| ||
22:56 | PSP: Make tests terminable. check-in: 54f020d139 user: js tags: trunk | |
Changes
Modified src/OFThread.h from [b4c8773e10] to [a1b30840b5].
︙ | ︙ | |||
64 65 66 67 68 69 70 | of_thread_t _thread; enum { OF_THREAD_NOT_RUNNING, OF_THREAD_RUNNING, OF_THREAD_WAITING_FOR_JOIN } _running; # ifdef OF_HAVE_BLOCKS | | | | | | 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | of_thread_t _thread; enum { OF_THREAD_NOT_RUNNING, OF_THREAD_RUNNING, OF_THREAD_WAITING_FOR_JOIN } _running; # ifdef OF_HAVE_BLOCKS of_thread_block_t _threadBlock; # endif id _returnValue; OFRunLoop *_runLoop; OFString *_name; } # ifdef OF_HAVE_PROPERTIES # ifdef OF_HAVE_BLOCKS @property (copy) of_thread_block_t threadBlock; # endif @property (copy) OFString *name; # endif /*! * @brief Creates a new thread. * * @return A new, autoreleased thread */ + (instancetype)thread; # ifdef OF_HAVE_BLOCKS /*! * @brief Creates a new thread with the specified block. * * @param threadBlock A block which is executed by the thread * @return A new, autoreleased thread */ + (instancetype)threadWithThreadBlock: (of_thread_block_t)threadBlock; # endif /*! * @brief Sets the Thread Local Storage for the specified key. * * The specified object is first retained and then the object stored before is * released. You can specify nil as object if you want the old object to be |
︙ | ︙ | |||
173 174 175 176 177 178 179 | + (void)OF_createMainThread; # ifdef OF_HAVE_BLOCKS /*! * @brief Initializes an already allocated thread with the specified block. * | | | | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | + (void)OF_createMainThread; # ifdef OF_HAVE_BLOCKS /*! * @brief Initializes an already allocated thread with the specified block. * * @param threadBlock A block which is executed by the thread * @return An initialized OFThread. */ - initWithThreadBlock: (of_thread_block_t)threadBlock; # endif /*! * @brief The main routine of the thread. You need to reimplement this! * * It can access the object passed to the threadWithObject or initWithObject * method using the instance variable named object. |
︙ | ︙ |
Modified src/OFThread.m from [6bf58b8f5f] to [076ba07ad1].
︙ | ︙ | |||
81 82 83 84 85 86 87 | objc_autoreleasePoolPush(); /* * Nasty workaround for thread implementations which can't return a * value on join. */ # ifdef OF_HAVE_BLOCKS | | | | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | objc_autoreleasePoolPush(); /* * Nasty workaround for thread implementations which can't return a * value on join. */ # ifdef OF_HAVE_BLOCKS if (thread->_threadBlock != NULL) thread->_returnValue = [thread->_threadBlock() retain]; else # endif thread->_returnValue = [[thread main] retain]; [thread handleTermination]; thread->_running = OF_THREAD_WAITING_FOR_JOIN; |
︙ | ︙ | |||
124 125 126 127 128 129 130 | # endif } #endif @implementation OFThread #ifdef OF_HAVE_THREADS # if defined(OF_HAVE_PROPERTIES) && defined(OF_HAVE_BLOCKS) | | | | | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | # endif } #endif @implementation OFThread #ifdef OF_HAVE_THREADS # if defined(OF_HAVE_PROPERTIES) && defined(OF_HAVE_BLOCKS) @synthesize threadBlock = _threadBlock; # endif + (void)initialize { if (self != [OFThread class]) return; if (!of_tlskey_new(&threadSelfKey)) @throw [OFInitializationFailedException exceptionWithClass: self]; } + (instancetype)thread { return [[[self alloc] init] autorelease]; } # ifdef OF_HAVE_BLOCKS + (instancetype)threadWithThreadBlock: (of_thread_block_t)threadBlock { return [[[self alloc] initWithThreadBlock: threadBlock] autorelease]; } # endif + (void)setObject: (id)object forTLSKey: (OFTLSKey*)key { id oldObject = of_tlskey_get(key->_key); |
︙ | ︙ | |||
264 265 266 267 268 269 270 | if (!of_tlskey_set(threadSelfKey, mainThread)) @throw [OFInitializationFailedException exceptionWithClass: self]; } # ifdef OF_HAVE_BLOCKS | | | | 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | if (!of_tlskey_set(threadSelfKey, mainThread)) @throw [OFInitializationFailedException exceptionWithClass: self]; } # ifdef OF_HAVE_BLOCKS - initWithThreadBlock: (of_thread_block_t)threadBlock { self = [super init]; @try { _threadBlock = [threadBlock copy]; } @catch (id e) { [self release]; @throw e; } return self; } |
︙ | ︙ | |||
378 379 380 381 382 383 384 385 386 387 388 389 390 391 | * the resources. */ if (_running == OF_THREAD_WAITING_FOR_JOIN) of_thread_detach(_thread); [_returnValue release]; [_runLoop release]; [super dealloc]; } #else - init { @try { | > > > | 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 | * the resources. */ if (_running == OF_THREAD_WAITING_FOR_JOIN) of_thread_detach(_thread); [_returnValue release]; [_runLoop release]; # ifdef OF_HAVE_BLOCKS [_threadBlock release]; # endif [super dealloc]; } #else - init { @try { |
︙ | ︙ |
Modified src/OFThreadPool.m from [b54e691e3d] to [26d1ba486e].
︙ | ︙ | |||
59 60 61 62 63 64 65 | selector: selector object: object] autorelease]; } #ifdef OF_HAVE_BLOCKS + (instancetype)jobWithBlock: (of_thread_pool_block_t)block { | < | | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | selector: selector object: object] autorelease]; } #ifdef OF_HAVE_BLOCKS + (instancetype)jobWithBlock: (of_thread_pool_block_t)block { return [[[self alloc] initWithBlock: block] autorelease]; } #endif - initWithTarget: (id)target selector: (SEL)selector object: (id)object { |
︙ | ︙ |