typedef struct {
void *foo;
} pthread_mutex_t;
typedef pthread_mutex_t lck_mtx_t;
extern int pthread_mutex_lock(pthread_mutex_t *);
extern int pthread_mutex_unlock(pthread_mutex_t *);
extern int pthread_mutex_trylock(pthread_mutex_t *);
extern int lck_mtx_lock(lck_mtx_t *);
extern int lck_mtx_unlock(lck_mtx_t *);
extern int lck_mtx_try_lock(lck_mtx_t *);
pthread_mutex_t mtx1, mtx2;
lck_mtx_t lck1, lck2;
void
ok1(void)
{
pthread_mutex_lock(&mtx1); }
void
ok2(void)
{
pthread_mutex_unlock(&mtx1); }
void
ok3(void)
{
pthread_mutex_lock(&mtx1); pthread_mutex_unlock(&mtx1); pthread_mutex_lock(&mtx1); pthread_mutex_unlock(&mtx1); }
void
ok4(void)
{
pthread_mutex_lock(&mtx1); pthread_mutex_unlock(&mtx1); pthread_mutex_lock(&mtx2); pthread_mutex_unlock(&mtx2); }
void
ok5(void)
{
if (pthread_mutex_trylock(&mtx1) == 0) pthread_mutex_unlock(&mtx1); }
void
ok6(void)
{
lck_mtx_lock(&lck1); }
void
ok7(void)
{
if (lck_mtx_try_lock(&lck1) != 0) lck_mtx_unlock(&lck1); }
void
bad1(void)
{
pthread_mutex_lock(&mtx1); pthread_mutex_lock(&mtx1); }
void
bad2(void)
{
pthread_mutex_lock(&mtx1); pthread_mutex_unlock(&mtx1); pthread_mutex_lock(&mtx1); pthread_mutex_lock(&mtx1); }
void
bad3(void)
{
pthread_mutex_lock(&mtx1); pthread_mutex_lock(&mtx2); pthread_mutex_unlock(&mtx1); pthread_mutex_unlock(&mtx2);
}
void
bad4(void)
{
if (pthread_mutex_trylock(&mtx1)) return;
pthread_mutex_lock(&mtx2); pthread_mutex_unlock(&mtx1); }
void
bad5(void)
{
lck_mtx_lock(&lck1); lck_mtx_lock(&lck1); }
void
bad6(void)
{
lck_mtx_lock(&lck1); lck_mtx_unlock(&lck1); lck_mtx_lock(&lck1); lck_mtx_lock(&lck1); }
void
bad7(void)
{
lck_mtx_lock(&lck1); lck_mtx_lock(&lck2); lck_mtx_unlock(&lck1); lck_mtx_unlock(&lck2);
}
void
bad8(void)
{
if (lck_mtx_try_lock(&lck1) == 0) return;
lck_mtx_lock(&lck2); lck_mtx_unlock(&lck1); }