Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Don't have an extra actor in s4u-synchro-mutex to create the others
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 20 Mar 2022 00:12:31 +0000 (01:12 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 20 Mar 2022 00:20:49 +0000 (01:20 +0100)
In MC, it could happen that the master actor terminates, leaves and
frees the shared memory before the end of the other actors.

examples/cpp/synchro-mutex/s4u-mc-synchro-mutex.tesh
examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp
examples/cpp/synchro-mutex/s4u-synchro-mutex.tesh

index 9c638b0..10c30de 100644 (file)
@@ -5,213 +5,213 @@ p This file tests the dependencies between MUTEX transitions
 $ ${bindir:=.}/../../../bin/simgrid-mc --log=mc_dfs.thres:verbose --log=root.fmt="[Checker]%e%m%n" -- ${bindir:=.}/s4u-synchro-mutex --cfg=actors:1 --log=s4u_test.thres:critical --log=root.fmt="[App%e%e%e%e]%e%m%n"
 > [Checker] Start a DFS exploration. Reduction is: dpor.
 > [App    ] Configuration change: Set 'actors' to '1'
-> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 1, state: 1, 0 interleaves)
-> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 2, state: 2, 0 interleaves)
-> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 3, state: 3, 0 interleaves)
-> [Checker] Execute 3: MUTEX_LOCK(mutex: 0, owner:3) (stack depth: 4, state: 4, 0 interleaves)
-> [Checker] Execute 3: MUTEX_WAIT(mutex: 0, owner:3) (stack depth: 5, state: 5, 0 interleaves)
-> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 6, 0 interleaves)
-> [Checker] Backtracking from 2;2;2;3;3;3;0
+> [Checker] Execute 1: MUTEX_LOCK(mutex: 0, owner:1) (stack depth: 1, state: 1, 0 interleaves)
+> [Checker] Execute 1: MUTEX_WAIT(mutex: 0, owner:1) (stack depth: 2, state: 2, 0 interleaves)
+> [Checker] Execute 1: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 3, state: 3, 0 interleaves)
+> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 4, state: 4, 0 interleaves)
+> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 5, state: 5, 0 interleaves)
+> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 6, 0 interleaves)
+> [Checker] Backtracking from 1;1;1;2;2;2;0
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=2)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=2)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
-> [Checker] Execute 3: MUTEX_LOCK(mutex: 0, owner:3) (stack depth: 1, state: 1, 0 interleaves)
-> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:3) (stack depth: 2, state: 8, 0 interleaves)
-> [Checker] Execute 3: MUTEX_WAIT(mutex: 0, owner:3) (stack depth: 3, state: 9, 0 interleaves)
-> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 0, owner:2) (stack depth: 4, state: 10, 0 interleaves)
-> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 5, state: 11, 0 interleaves)
-> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 12, 0 interleaves)
-> [Checker] Backtracking from 3;2;3;3;2;2;0
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:1) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
+> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 1, state: 1, 0 interleaves)
+> [Checker] Execute 1: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 2, state: 8, 0 interleaves)
+> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 3, state: 9, 0 interleaves)
+> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:1) (stack depth: 4, state: 10, 0 interleaves)
+> [Checker] Execute 1: MUTEX_WAIT(mutex: 0, owner:1) (stack depth: 5, state: 11, 0 interleaves)
+> [Checker] Execute 1: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 12, 0 interleaves)
+> [Checker] Backtracking from 2;1;2;2;1;1;0
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:2) (state=10)
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=11)
-> [Checker] Backtracking from 3;2;3;3
+> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:1) (state=10)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=11)
+> [Checker] Backtracking from 2;1;2;2
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=8)
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:3) (state=9)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=8)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=9)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=8)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=8)
 > [Checker] DFS exploration ended. 13 unique states visited; 3 backtracks (18 transition replays, 3 states visited overall)
 
 $ ${bindir:=.}/../../../bin/simgrid-mc --log=mc_dfs.thres:verbose --log=root.fmt="[Checker]%e%m%n" -- ${bindir:=.}/s4u-synchro-mutex --cfg=actors:2 --log=s4u_test.thres:critical --log=root.fmt="[App%e%e%e%e]%e%m%n"
 > [Checker] Start a DFS exploration. Reduction is: dpor.
 > [App    ] Configuration change: Set 'actors' to '2'
-> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 1, state: 1, 0 interleaves)
-> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 2, state: 2, 0 interleaves)
-> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 3, state: 3, 0 interleaves)
-> [Checker] Execute 3: MUTEX_LOCK(mutex: 0, owner:3) (stack depth: 4, state: 4, 0 interleaves)
-> [Checker] Execute 3: MUTEX_WAIT(mutex: 0, owner:3) (stack depth: 5, state: 5, 0 interleaves)
-> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 6, 0 interleaves)
-> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 7, state: 7, 0 interleaves)
-> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 8, state: 8, 0 interleaves)
-> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 9, state: 9, 0 interleaves)
-> [Checker] Execute 5: MUTEX_LOCK(mutex: 1, owner:5) (stack depth: 10, state: 10, 0 interleaves)
-> [Checker] Execute 5: MUTEX_WAIT(mutex: 1, owner:5) (stack depth: 11, state: 11, 0 interleaves)
-> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 12, 0 interleaves)
-> [Checker] Backtracking from 2;2;2;3;3;3;4;4;4;5;5;5;0
+> [Checker] Execute 1: MUTEX_LOCK(mutex: 0, owner:1) (stack depth: 1, state: 1, 0 interleaves)
+> [Checker] Execute 1: MUTEX_WAIT(mutex: 0, owner:1) (stack depth: 2, state: 2, 0 interleaves)
+> [Checker] Execute 1: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 3, state: 3, 0 interleaves)
+> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 4, state: 4, 0 interleaves)
+> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 5, state: 5, 0 interleaves)
+> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 6, 0 interleaves)
+> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 7, state: 7, 0 interleaves)
+> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 8, state: 8, 0 interleaves)
+> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 9, state: 9, 0 interleaves)
+> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 10, state: 10, 0 interleaves)
+> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 11, state: 11, 0 interleaves)
+> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 12, 0 interleaves)
+> [Checker] Backtracking from 1;1;1;2;2;2;3;3;3;4;4;4;0
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 1, owner:-1) (state=9)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=10)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=10)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 1, owner:4) (state=8)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=10)
+> [Checker]   MUTEX_WAIT(mutex: 1, owner:3) (state=8)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=10)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=10)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=10)
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=6)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:3) (state=5)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=5)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=7)
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=2)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=2)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
-> [Checker] Execute 5: MUTEX_LOCK(mutex: 1, owner:5) (stack depth: 7, state: 7, 0 interleaves)
-> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:5) (stack depth: 8, state: 14, 0 interleaves)
-> [Checker] Execute 5: MUTEX_WAIT(mutex: 1, owner:5) (stack depth: 9, state: 15, 0 interleaves)
-> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 1, owner:4) (stack depth: 10, state: 16, 0 interleaves)
-> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 11, state: 17, 0 interleaves)
-> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 18, 0 interleaves)
-> [Checker] Backtracking from 2;2;2;3;3;3;5;4;5;5;4;4;0
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:1) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=7)
+> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 7, state: 7, 0 interleaves)
+> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 8, state: 14, 0 interleaves)
+> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 9, state: 15, 0 interleaves)
+> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:3) (stack depth: 10, state: 16, 0 interleaves)
+> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 11, state: 17, 0 interleaves)
+> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 18, 0 interleaves)
+> [Checker] Backtracking from 1;1;1;2;2;2;4;3;4;4;3;3;0
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_UNLOCK(mutex: 1, owner:4) (state=16)
-> [Checker]   MUTEX_WAIT(mutex: 1, owner:4) (state=17)
-> [Checker] Backtracking from 2;2;2;3;3;3;5;4;5;5
+> [Checker]   MUTEX_UNLOCK(mutex: 1, owner:3) (state=16)
+> [Checker]   MUTEX_WAIT(mutex: 1, owner:3) (state=17)
+> [Checker] Backtracking from 1;1;1;2;2;2;4;3;4;4
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=14)
-> [Checker]   MUTEX_WAIT(mutex: 1, owner:5) (state=15)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=14)
+> [Checker]   MUTEX_WAIT(mutex: 1, owner:4) (state=15)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=7)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=14)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=14)
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=6)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:3) (state=5)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=7)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=5)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=2)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=7)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=2)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=7)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:1) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=7)
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=2)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=2)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=4)
-> [Checker] Execute 3: MUTEX_LOCK(mutex: 0, owner:3) (stack depth: 1, state: 1, 0 interleaves)
-> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:3) (stack depth: 2, state: 20, 0 interleaves)
-> [Checker] Execute 3: MUTEX_WAIT(mutex: 0, owner:3) (stack depth: 3, state: 21, 0 interleaves)
-> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 0, owner:2) (stack depth: 4, state: 22, 0 interleaves)
-> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 5, state: 23, 0 interleaves)
-> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 24, 0 interleaves)
-> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 7, state: 25, 0 interleaves)
-> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 8, state: 26, 0 interleaves)
-> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 9, state: 27, 0 interleaves)
-> [Checker] Execute 5: MUTEX_LOCK(mutex: 1, owner:5) (stack depth: 10, state: 28, 0 interleaves)
-> [Checker] Execute 5: MUTEX_WAIT(mutex: 1, owner:5) (stack depth: 11, state: 29, 0 interleaves)
-> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 30, 0 interleaves)
-> [Checker] Backtracking from 3;2;3;3;2;2;4;4;4;5;5;5;0
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:1) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=4)
+> [Checker] Execute 2: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 1, state: 1, 0 interleaves)
+> [Checker] Execute 1: MUTEX_LOCK(mutex: 0, owner:2) (stack depth: 2, state: 20, 0 interleaves)
+> [Checker] Execute 2: MUTEX_WAIT(mutex: 0, owner:2) (stack depth: 3, state: 21, 0 interleaves)
+> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 0, owner:1) (stack depth: 4, state: 22, 0 interleaves)
+> [Checker] Execute 1: MUTEX_WAIT(mutex: 0, owner:1) (stack depth: 5, state: 23, 0 interleaves)
+> [Checker] Execute 1: MUTEX_UNLOCK(mutex: 0, owner:-1) (stack depth: 6, state: 24, 0 interleaves)
+> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 7, state: 25, 0 interleaves)
+> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 8, state: 26, 0 interleaves)
+> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 9, state: 27, 0 interleaves)
+> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 10, state: 28, 0 interleaves)
+> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 11, state: 29, 0 interleaves)
+> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 30, 0 interleaves)
+> [Checker] Backtracking from 2;1;2;2;1;1;3;3;3;4;4;4;0
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 1, owner:-1) (state=27)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=28)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=28)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 1, owner:4) (state=26)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=28)
+> [Checker]   MUTEX_WAIT(mutex: 1, owner:3) (state=26)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=28)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=28)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=25)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=28)
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=24)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=23)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=23)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:2) (state=22)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
+> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:1) (state=22)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:3) (state=21)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=21)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=20)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=20)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
-> [Checker] Execute 5: MUTEX_LOCK(mutex: 1, owner:5) (stack depth: 7, state: 25, 0 interleaves)
-> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:5) (stack depth: 8, state: 32, 0 interleaves)
-> [Checker] Execute 5: MUTEX_WAIT(mutex: 1, owner:5) (stack depth: 9, state: 33, 0 interleaves)
-> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 1, owner:4) (stack depth: 10, state: 34, 0 interleaves)
-> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 11, state: 35, 0 interleaves)
-> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 36, 0 interleaves)
-> [Checker] Backtracking from 3;2;3;3;2;2;5;4;5;5;4;4;0
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:3) (state=25)
+> [Checker] Execute 4: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 7, state: 25, 0 interleaves)
+> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:4) (stack depth: 8, state: 32, 0 interleaves)
+> [Checker] Execute 4: MUTEX_WAIT(mutex: 1, owner:4) (stack depth: 9, state: 33, 0 interleaves)
+> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 1, owner:3) (stack depth: 10, state: 34, 0 interleaves)
+> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 11, state: 35, 0 interleaves)
+> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 12, state: 36, 0 interleaves)
+> [Checker] Backtracking from 2;1;2;2;1;1;4;3;4;4;3;3;0
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_UNLOCK(mutex: 1, owner:4) (state=34)
-> [Checker]   MUTEX_WAIT(mutex: 1, owner:4) (state=35)
-> [Checker] Backtracking from 3;2;3;3;2;2;5;4;5;5
+> [Checker]   MUTEX_UNLOCK(mutex: 1, owner:3) (state=34)
+> [Checker]   MUTEX_WAIT(mutex: 1, owner:3) (state=35)
+> [Checker] Backtracking from 2;1;2;2;1;1;4;3;4;4
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=32)
-> [Checker]   MUTEX_WAIT(mutex: 1, owner:5) (state=33)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=32)
+> [Checker]   MUTEX_WAIT(mutex: 1, owner:4) (state=33)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=25)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=32)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=32)
 > [Checker] INDEPENDENT Transitions:
 > [Checker]   MUTEX_UNLOCK(mutex: 0, owner:-1) (state=24)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=25)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=23)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=25)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=23)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:2) (state=22)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=25)
+> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:1) (state=22)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:3) (state=21)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=25)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=21)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=20)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=25)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=20)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 1, owner:5) (state=25)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 1, owner:4) (state=25)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:2) (state=22)
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=23)
-> [Checker] Backtracking from 3;2;3;3
+> [Checker]   MUTEX_UNLOCK(mutex: 0, owner:1) (state=22)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:1) (state=23)
+> [Checker] Backtracking from 2;1;2;2
 > [Checker] INDEPENDENT Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=20)
-> [Checker]   MUTEX_WAIT(mutex: 0, owner:3) (state=21)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=20)
+> [Checker]   MUTEX_WAIT(mutex: 0, owner:2) (state=21)
 > [Checker] Dependent Transitions:
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=1)
-> [Checker]   MUTEX_LOCK(mutex: 0, owner:3) (state=20)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=1)
+> [Checker]   MUTEX_LOCK(mutex: 0, owner:2) (state=20)
 > [Checker] DFS exploration ended. 37 unique states visited; 7 backtracks (76 transition replays, 33 states visited overall)
 
 $ ${bindir:=.}/../../../bin/simgrid-mc -- ${bindir:=.}/s4u-synchro-mutex --cfg=actors:3 --log=s4u_test.thres:critical
index 2127d03..faa8d2b 100644 (file)
@@ -44,8 +44,11 @@ static void workerLockGuard(sg4::MutexPtr mutex, int& result)
   // Nothing specific here: the unlock will be automatic
 }
 
-static void master()
+int main(int argc, char** argv)
 {
+  sg4::Engine e(&argc, argv);
+  e.load_platform("../../platforms/two_hosts.xml");
+
   /* Create the requested amount of actors pairs. Each pair has a specific mutex and cell in `result`. */
   std::vector<int> result(cfg_actor_count.get());
 
@@ -55,17 +58,10 @@ static void master()
     sg4::Actor::create("worker", sg4::Host::by_name("Tremblay"), worker, mutex, std::ref(result[i]));
   }
 
-  sg4::this_actor::sleep_for(10);
+  e.run();
+
   for (int i = 0; i < cfg_actor_count; i++)
     XBT_INFO("Result[%d] -> %d", i, result[i]);
-}
-
-int main(int argc, char **argv)
-{
-  sg4::Engine e(&argc, argv);
-  e.load_platform("../../platforms/two_hosts.xml");
-  sg4::Actor::create("main", e.host_by_name("Tremblay"), master);
-  e.run();
 
   return 0;
 }
index 9e92179..fbec803 100644 (file)
@@ -1,33 +1,33 @@
 #!/usr/bin/env tesh
 
 $ ${bindir:=.}/s4u-synchro-mutex
-> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
-> [Jupiter:worker:(2) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Tremblay:worker:(3) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
-> [Tremblay:worker:(3) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Jupiter:worker:(4) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
-> [Jupiter:worker:(4) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Tremblay:worker:(5) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
-> [Tremblay:worker:(5) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Jupiter:worker:(6) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
-> [Jupiter:worker:(6) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Tremblay:worker:(7) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
-> [Tremblay:worker:(7) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Jupiter:worker:(8) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
-> [Jupiter:worker:(8) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Tremblay:worker:(9) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
-> [Tremblay:worker:(9) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Jupiter:worker:(10) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
-> [Jupiter:worker:(10) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Tremblay:worker:(11) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
-> [Tremblay:worker:(11) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Jupiter:worker:(12) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
-> [Jupiter:worker:(12) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Tremblay:worker:(13) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
-> [Tremblay:worker:(13) 0.000000] [s4u_test/INFO] I'm done, good bye
-> [Tremblay:main:(1) 10.000000] [s4u_test/INFO] Result[0] -> 2
-> [Tremblay:main:(1) 10.000000] [s4u_test/INFO] Result[1] -> 2
-> [Tremblay:main:(1) 10.000000] [s4u_test/INFO] Result[2] -> 2
-> [Tremblay:main:(1) 10.000000] [s4u_test/INFO] Result[3] -> 2
-> [Tremblay:main:(1) 10.000000] [s4u_test/INFO] Result[4] -> 2
-> [Tremblay:main:(1) 10.000000] [s4u_test/INFO] Result[5] -> 2
+> [Jupiter:worker:(1) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
+> [Jupiter:worker:(1) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Jupiter:worker:(3) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
+> [Jupiter:worker:(3) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Jupiter:worker:(5) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
+> [Jupiter:worker:(5) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Jupiter:worker:(7) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
+> [Jupiter:worker:(7) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Jupiter:worker:(9) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
+> [Jupiter:worker:(9) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Jupiter:worker:(11) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a lock_guard
+> [Jupiter:worker:(11) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Tremblay:worker:(2) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
+> [Tremblay:worker:(2) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Tremblay:worker:(4) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
+> [Tremblay:worker:(4) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Tremblay:worker:(6) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
+> [Tremblay:worker:(6) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Tremblay:worker:(8) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
+> [Tremblay:worker:(8) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Tremblay:worker:(10) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
+> [Tremblay:worker:(10) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [Tremblay:worker:(12) 0.000000] [s4u_test/INFO] Hello s4u, I'm ready to compute after a regular lock
+> [Tremblay:worker:(12) 0.000000] [s4u_test/INFO] I'm done, good bye
+> [0.000000] [s4u_test/INFO] Result[0] -> 2
+> [0.000000] [s4u_test/INFO] Result[1] -> 2
+> [0.000000] [s4u_test/INFO] Result[2] -> 2
+> [0.000000] [s4u_test/INFO] Result[3] -> 2
+> [0.000000] [s4u_test/INFO] Result[4] -> 2
+> [0.000000] [s4u_test/INFO] Result[5] -> 2