Use NSRecursiveLock instead of if (dispatch_get_current_queue() == _queue)