KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've always been interested in how to write the following code to use it for unit testing: Is it possible to extend NSThread with a method that would check if a particular thread is blocked? Right now I'am working with NSCondition: Xcode shows me the chain which is called by -wait to block the thread: [NSCondition wait] pthread_cond_wait$UNIX2003 _pthread_cond_wait __psynch_cvwait Besides checking the locks done by NSCondition, if it is even possible, I would highly appreciate method working also for any other blocking capabilities (dispatch semaphores, condition locks, sleeping threads and so on, ) - I have no idea about Objective-C internals, if maybe they could be catched by one method or each needs its own. Here is a simple example of what I would like to achieve. The mysterious method is called isBlocked . // Some test case // ... __block NSThread *thread; NSCondition *condition = [NSCondition alloc] init]; dispatch_async(someQueue(), ^{ thread = NSThread.currentThread; [condition lock]; [condition wait]; [condition unlock]; }); while(1) { NSLog(@"Thread is blocked: %d", thread.isBlocked); } Note: I am not good at C and all this low-level POSIX stuff, so, please, be verbose. Note 2: I am interested in solutions working for dispatch queues as well: if someone can show me how to test the fact that someQueue() is blocked by -[NSCondition wait] (not the fact that it is going to be blocked (fx hacking some code before -[condition wait] is run and the block is set), but the fact that thread/queue is blocked), I will accept this as an answer as much like I would do with working -[NSThread isBlocked] method. Note 3: Suspecting bad news like "it is not possible", I claim that any ideas about catching the fact that -[
Tags (comma-separated)
Save Edits
Cancel