int main(void) { int i; test_mutexattr(); i = test_relock(PTHREAD_MUTEX_NORMAL); if (i != -1) t_error("PTHREAD_MUTEX_NORMAL relock did not deadlock, got %s\n", strerror(i)); i = test_relock(PTHREAD_MUTEX_ERRORCHECK); if (i != EDEADLK) t_error("PTHREAD_MUTEX_ERRORCHECK relock did not return EDEADLK, got %s\n", i==-1?"deadlock":strerror(i)); i = test_relock(PTHREAD_MUTEX_RECURSIVE); if (i != 0) t_error("PTHREAD_MUTEX_RECURSIVE relock did not succed, got %s\n", i==-1?"deadlock":strerror(i)); i = test_unlock(PTHREAD_MUTEX_ERRORCHECK); if (i != EPERM) t_error("PTHREAD_MUTEX_ERRORCHECK unlock did not return EPERM, got %s\n", strerror(i)); i = test_unlock(PTHREAD_MUTEX_RECURSIVE); if (i != EPERM) t_error("PTHREAD_MUTEX_RECURSIVE unlock did not return EPERM, got %s\n", strerror(i)); i = test_unlock_other(PTHREAD_MUTEX_ERRORCHECK); if (i != EPERM) t_error("PTHREAD_MUTEX_ERRORCHECK unlock did not return EPERM, got %s\n", strerror(i)); i = test_unlock_other(PTHREAD_MUTEX_RECURSIVE); if (i != EPERM) t_error("PTHREAD_MUTEX_RECURSIVE unlock did not return EPERM, got %s\n", strerror(i)); return t_status; }
bool test ( const K &key ) { RWLock::Instance inst = m_lock.GetReadLock(); return test_unlock(key); }