/* If the race is realized, bail out now. */
if (checkDataRaces()) {
- model->assert_thread();
+ model->set_assert();
+ model->switch_to_master(NULL);
}
}
printf("Datarace detected\n");
printf("Location %p\n", race->address);
printf("Initial access: thread %u clock %u, iswrite %u\n",race->oldthread,race->oldclock, race->isoldwrite);
- printf("Second access: thread %u, iswrite %u\n", race->newaction->get_tid(), race->isnewwrite);
+ printf("Second access: thread %u clock %u, iswrite %u\n", race->newaction->get_tid(), race->newaction->get_seq_number() , race->isnewwrite);
}
/** This function does race detection for a write on an expanded record. */
/** @return The currently executing Thread. */
Thread * get_current_thread() { return scheduler->get_current_thread(); }
- void assert_thread();
int switch_to_master(ModelAction *act);
ClockVector * get_cv(thread_id_t tid);
ModelAction * get_parent_action(thread_id_t tid);
void finish_execution();
bool isfeasibleprefix();
+ void set_assert() {asserted=true;}
MEMALLOC
private:
/** The scheduler to use: tracks the running/ready Threads */
Scheduler *scheduler;
+ bool has_asserted() {return asserted;}
+ void reset_asserted() {asserted=false;}
int next_thread_id;
modelclock_t used_sequence_numbers;
int num_executions;
/**
* @brief The modification order graph
*
- * A direceted acyclic graph recording observations of the modification
+ * A directed acyclic graph recording observations of the modification
* order on all the atomic objects in the system. This graph should
* never contain any cycles, as that represents a violation of the
* memory model (total ordering). This graph really consists of many
* <tt>b</tt>.
*/
CycleGraph *mo_graph;
-
bool failed_promise;
+ bool asserted;
};
extern ModelChecker *model;
thrd_t t1, t2;
atomic_init(&mylock.lock, RW_LOCK_BIAS);
- printf("Thread %d: creating 2 threads\n", thrd_current());
thrd_create(&t1, (thrd_start_t)&a, NULL);
thrd_create(&t2, (thrd_start_t)&a, NULL);
thrd_join(t1);
thrd_join(t2);
- printf("Thread %d is finished\n", thrd_current());
}