int pthread_create(pthread_t *t, const pthread_attr_t * attr,
pthread_start_t start_routine, void * arg) {
- if (!model) {
- snapshot_system_init(10000, 1024, 1024, 40000);
- model = new ModelChecker();
- model->startChecker();
- }
-
+ createModelIfNotExist();
struct pthread_params params = { start_routine, arg };
/* seq_cst is just a 'don't care' parameter */
}
int pthread_mutex_init(pthread_mutex_t *p_mutex, const pthread_mutexattr_t * attr) {
- if (!model) {
- snapshot_system_init(10000, 1024, 1024, 40000);
- model = new ModelChecker();
- model->startChecker();
- }
-
+ createModelIfNotExist();
int mutex_type = PTHREAD_MUTEX_DEFAULT;
if (attr != NULL)
pthread_mutexattr_gettype(attr, &mutex_type);
}
int pthread_mutex_lock(pthread_mutex_t *p_mutex) {
- if (!model) {
- snapshot_system_init(10000, 1024, 1024, 40000);
- model = new ModelChecker();
- model->startChecker();
- }
-
+ createModelIfNotExist();
ModelExecution *execution = model->get_execution();
/* to protect the case where PTHREAD_MUTEX_INITIALIZER is used
}
int pthread_mutex_trylock(pthread_mutex_t *p_mutex) {
- if (!model) {
- snapshot_system_init(10000, 1024, 1024, 40000);
- model = new ModelChecker();
- model->startChecker();
- }
-
+ createModelIfNotExist();
ModelExecution *execution = model->get_execution();
cdsc::snapmutex *m = execution->getMutexMap()->get(p_mutex);
return m->try_lock() ? 0 : EBUSY;
int pthread_mutex_timedlock (pthread_mutex_t *__restrict p_mutex,
const struct timespec *__restrict abstime) {
// timedlock just gives the option of giving up the lock, so return and let the scheduler decide which thread goes next
-
- if (!model) {
- snapshot_system_init(10000, 1024, 1024, 40000);
- model = new ModelChecker();
- model->startChecker();
- }
-
+ createModelIfNotExist();
ModelExecution *execution = model->get_execution();
/* to protect the case where PTHREAD_MUTEX_INITIALIZER is used
}
pthread_t pthread_self() {
- if (!model) {
- snapshot_system_init(10000, 1024, 1024, 40000);
- model = new ModelChecker();
- model->startChecker();
- }
-
+ createModelIfNotExist();
Thread* th = model->get_current_thread();
return (pthread_t)th->get_id();
}