actor_transitions.emplace_back(deserialize_transition(actor.aid, times_considered, stream));
}
- XBT_DEBUG("Received %zu transitions for actor %ld", actor_transitions.size(), actor.aid);
+ XBT_DEBUG("Received %zu transitions for actor %ld. The first one is %s", actor_transitions.size(), actor.aid,
+ (actor_transitions.size() > 0 ? actor_transitions[0]->to_string().c_str() : "null"));
whereto.try_emplace(actor.aid, actor.aid, actor.enabled, actor.max_considered, std::move(actor_transitions));
}
}
kernel::actor::simcall_blocking(
[issuer, duration]() {
if (MC_is_active() || MC_record_replay_is_active()) {
- MC_process_clock_add(issuer, duration);
+ // MC_process_clock_add(issuer, duration); // BUG: Makes the exploration loop
issuer->simcall_answer();
- return;
+ } else {
+ kernel::activity::ActivityImplPtr sync = issuer->sleep(duration);
+ sync->register_simcall(&issuer->simcall_);
}
- kernel::activity::ActivityImplPtr sync = issuer->sleep(duration);
- sync->register_simcall(&issuer->simcall_);
},
&observer);
// Flag to stop the barber thread when all customers
// have been serviced.
int allDone = 0;
+int DEBUG = 0;
static void randwait(int secs)
{
// Leave for the shop and take some random amount of
// time to arrive.
- printf("Customer %d leaving for barber shop.\n", num);
+ if (DEBUG)
+ printf("Customer %d leaving for barber shop.\n", num);
randwait(5);
- printf("Customer %d arrived at barber shop.\n", num);
+ if (DEBUG)
+ printf("Customer %d arrived at barber shop.\n", num);
// Wait for space to open up in the waiting room...
sem_wait(&waitingRoom);
- printf("Customer %d entering waiting room.\n", num);
+ if (DEBUG)
+ printf("Customer %d entering waiting room.\n", num);
// Wait for the barber chair to become free.
sem_wait(&barberChair);
sem_post(&waitingRoom);
// Wake up the barber...
- printf("Customer %d waking the barber.\n", num);
+ if (DEBUG)
+ printf("Customer %d waking the barber.\n", num);
sem_post(&barberPillow);
// Wait for the barber to finish cutting your hair.
// Give up the chair.
sem_post(&barberChair);
- printf("Customer %d leaving barber shop.\n", num);
+ if (DEBUG)
+ printf("Customer %d leaving barber shop.\n", num);
return NULL;
}
while (!allDone) {
// Sleep until someone arrives and wakes you..
- printf("The barber is sleeping\n");
+ if (DEBUG)
+ printf("The barber is sleeping\n");
sem_wait(&barberPillow);
// Skip this stuff at the end...
// Take a random amount of time to cut the
// customer's hair.
- printf("The barber is cutting hair\n");
+ if (DEBUG)
+ printf("The barber is cutting hair\n");
randwait(3);
- printf("The barber has finished cutting hair.\n");
+ if (DEBUG)
+ printf("The barber has finished cutting hair.\n");
// Release the customer when done cutting...
sem_post(&seatBelt);
} else {
- printf("The barber is going home for the day.\n");
+ if (DEBUG)
+ printf("The barber is going home for the day.\n");
}
}
return NULL;
// Check to make sure there are the right number of
// command line arguments.
- if (argc != 4) {
- printf("Use: SleepBarber <Num Customers> <Num Chairs> <rand seed>\n");
+ if (argc != 5) {
+ printf("Use: SleepBarber <Num Customers> <Num Chairs> <rand seed> <DEBUG>\n");
exit(-1);
}
numCustomers = atoi(argv[1]);
numChairs = atoi(argv[2]);
RandSeed = atol(argv[3]);
+ DEBUG = atoi(argv[4]);
// Make sure the number of threads is less than the number of
// customers we can support.
# We ignore the LD_PRELOAD lines from the expected output because they contain the build path
! ignore .*LD_PRELOAD.*
-$ $VALGRIND_NO_TRACE_CHILDREN ${bindir:=.}/../../bin/simgrid-mc --cfg=model-check/setenv:LD_PRELOAD=${libdir:=.}/libsgmalloc.so:${libdir:=.}/libsthread.so ${bindir:=.}/mcmini/mcmini-barber_shop_ok 5 3 0
+$ $VALGRIND_NO_TRACE_CHILDREN ${bindir:=.}/../../bin/simgrid-mc --cfg=model-check/setenv:LD_PRELOAD=${libdir:=.}/libsgmalloc.so:${libdir:=.}/libsthread.so ${bindir:=.}/mcmini/mcmini-barber_shop_ok 3 2 0 0
+> sthread is intercepting the execution of /home/mquinson/Code/simgrid/build/default/teshsuite/mc/mcmini/mcmini-barber_shop_ok
+>
+> SleepBarber.c
+>
+> A solution to the sleeping barber problem using semaphores.
+> [0.000000] [mc_dfs/INFO] Start a DFS exploration. Reduction is: dpor.
+> [0.000000] [mc_dfs/INFO] DFS exploration ended. 5169 unique states visited; 959 backtracks (21531 transition replays, 27659 states visited overall)