You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.2 KiB
64 lines
1.2 KiB
8 years ago
|
/*
|
||
6 years ago
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||
8 years ago
|
*
|
||
7 years ago
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
8 years ago
|
*/
|
||
|
#include <pthread.h>
|
||
|
|
||
|
int normal_life_ok(pthread_mutex_t* m) {
|
||
|
if (pthread_mutex_init(m, 0))
|
||
|
return 0;
|
||
|
if (pthread_mutex_lock(m))
|
||
|
return 0;
|
||
|
if (pthread_mutex_unlock(m))
|
||
|
return 0;
|
||
|
if (pthread_mutex_destroy(m))
|
||
|
return 0;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int normal_ok2() {
|
||
|
pthread_mutex_t m;
|
||
|
normal_life_ok(&m);
|
||
|
}
|
||
|
|
||
|
void FN_double_lock_bad(pthread_mutex_t* m) {
|
||
|
pthread_mutex_lock(m);
|
||
|
pthread_mutex_lock(m);
|
||
|
}
|
||
|
|
||
|
void double_lock_uninit_bad() {
|
||
|
pthread_mutex_t m;
|
||
|
FN_double_lock_bad(&m);
|
||
|
}
|
||
|
|
||
|
void double_lock_bad2() {
|
||
|
pthread_mutex_t m;
|
||
|
pthread_mutex_init(&m, 0);
|
||
|
FN_double_lock_bad(&m);
|
||
|
}
|
||
|
|
||
|
void double_unlock_bad(pthread_mutex_t* m) {
|
||
|
pthread_mutex_unlock(m);
|
||
|
pthread_mutex_unlock(m);
|
||
|
}
|
||
|
|
||
|
void double_unlock_bad2() {
|
||
|
pthread_mutex_t m;
|
||
|
pthread_mutex_init(&m, 0);
|
||
|
pthread_mutex_lock(&m);
|
||
|
double_unlock_bad(&m);
|
||
|
}
|
||
|
|
||
|
void double_init_bad(pthread_mutex_t* m) {
|
||
|
pthread_mutex_init(m, 0);
|
||
|
pthread_mutex_init(m, 0);
|
||
|
}
|
||
|
|
||
|
// Already reported in double_init_bad
|
||
|
void double_init_ok() {
|
||
|
pthread_mutex_t m;
|
||
|
double_init_bad(&m);
|
||
|
}
|