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 -[

Edit
Report