X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=main.cc;h=73b3b0c410d95fbdbd06190eadd35b25b1288e77;hb=805a3e1b51dacac117b394f1c1b0220e3ae9f5e4;hp=8db63e6d1733d1204e9855575c49d06dafc6d9a6;hpb=4224cb3a9afdac601fd2778253214e42f8b2fdf4;p=c11tester.git diff --git a/main.cc b/main.cc index 8db63e6d..73b3b0c4 100644 --- a/main.cc +++ b/main.cc @@ -1,14 +1,20 @@ +/** @file main.cc + * @brief Entry point for the model checker. + */ + #include "libthreads.h" #include "common.h" #include "threads.h" +#include "datarace.h" + /* global "model" object */ #include "model.h" -#include "snapshot.h" #include "snapshot-interface.h" -/* - * Return 1 if found next thread, 0 otherwise +/** + * The thread_system_next function takes the next step in the execution. + * @return Returns the 1 if there is another step and 0 otherwise. */ static int thread_system_next(void) { Thread *curr, *next; @@ -25,6 +31,8 @@ static int thread_system_next(void) { ASSERT(false); } next = model->scheduler->next_thread(); + if (!model->isfeasible()) + return 1; if (next) next->set_state(THREAD_RUNNING); DEBUG("(%d, %d)\n", curr ? curr->get_id() : -1, next ? next->get_id() : -1); @@ -33,18 +41,26 @@ static int thread_system_next(void) { return Thread::swap(model->get_system_context(), next); } +/** The thread_wait_finish method runs the current execution until we + * have no more steps to take. + */ static void thread_wait_finish(void) { DBG(); while (!thread_system_next()); } -void real_main() { + +/** The real_main function contains the main model checking loop. */ +static void real_main() { thrd_t user_thread; ucontext_t main_context; - //Create the singleton snapshotStack object - snapshotObject = new snapshotStack(); + //Initialize race detector + initRaceDetector(); + + //Create the singleton SnapshotStack object + snapshotObject = new SnapshotStack(); model = new ModelChecker(); @@ -54,7 +70,6 @@ void real_main() { model->set_system_context(&main_context); snapshotObject->snapshotStep(0); - do { /* Start user program */ model->add_thread(new Thread(&user_thread, (void (*)(void *)) &user_main, NULL)); @@ -71,8 +86,9 @@ void real_main() { int main_numargs; char ** main_args; -/* - * Main system function +/** + * Main function. Just initializes snapshotting library and the + * snapshotting library calls the real_main function. */ int main(int numargs, char ** args) { /* Stash this stuff in case someone wants it eventually */