Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
I just realized that the changes I made to the cond-wait test would break
authormarkls <markls@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 30 Nov 2007 01:38:14 +0000 (01:38 +0000)
committermarkls <markls@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 30 Nov 2007 01:38:14 +0000 (01:38 +0000)
programs that contain more than one MPI_Barrier.  This should fix the problem
for most systems, though maybe this function should do something like SMPI_DO_ONCE and
maintain a separate counter for each invocation...

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5097 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/smpi/smpi_base.c

index 797e242..d923982 100644 (file)
@@ -176,7 +176,10 @@ int smpi_mpi_barrier(smpi_mpi_communicator_t comm)
 {
 
        SIMIX_mutex_lock(comm->barrier_mutex);
 {
 
        SIMIX_mutex_lock(comm->barrier_mutex);
-       if (++comm->barrier_count >= comm->size) {
+       ++comm->barrier_count;
+       if (comm->barrier_count > comm->size) { // only happens on second barrier...
+               comm->barrier_count = 0;
+       } else if (comm->barrier_count == comm->size) {
                SIMIX_cond_broadcast(comm->barrier_cond);
        }
        while (comm->barrier_count < comm->size) {
                SIMIX_cond_broadcast(comm->barrier_cond);
        }
        while (comm->barrier_count < comm->size) {