From 96e1dabe2c4d012e50803f9e8dfaba684d07887f Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 15 Mar 2022 14:04:29 +0100 Subject: [PATCH] Better fix for the mutex IDs modifications in mutex-MC test kill the extra mutex forgotten out of the loop in the hijacked example This reverts and reworks commit 5190c1c45270085777ef904c35ab99b5ad52d681. --- .../synchro-mutex/s4u-mc-synchro-mutex.tesh | 288 +++++++++--------- .../cpp/synchro-mutex/s4u-synchro-mutex.cpp | 1 - 2 files changed, 144 insertions(+), 145 deletions(-) diff --git a/examples/cpp/synchro-mutex/s4u-mc-synchro-mutex.tesh b/examples/cpp/synchro-mutex/s4u-mc-synchro-mutex.tesh index 2ac46cf497..9c638b008b 100644 --- a/examples/cpp/synchro-mutex/s4u-mc-synchro-mutex.tesh +++ b/examples/cpp/synchro-mutex/s4u-mc-synchro-mutex.tesh @@ -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: 1, owner:2) (stack depth: 1, state: 1, 0 interleaves) -> [Checker] Execute 2: MUTEX_WAIT(mutex: 1, owner:2) (stack depth: 2, state: 2, 0 interleaves) -> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 3, state: 3, 0 interleaves) -> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 4, state: 4, 0 interleaves) -> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 5, state: 5, 0 interleaves) -> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 6, state: 6, 0 interleaves) +> [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] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=3) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=4) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=2) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) +> [Checker] MUTEX_WAIT(mutex: 0, owner:2) (state=2) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=4) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:2) (state=1) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) -> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 1, state: 1, 0 interleaves) -> [Checker] Execute 2: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 2, state: 8, 0 interleaves) -> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 3, state: 9, 0 interleaves) -> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:2) (stack depth: 4, state: 10, 0 interleaves) -> [Checker] Execute 2: MUTEX_WAIT(mutex: 1, owner:2) (stack depth: 5, state: 11, 0 interleaves) -> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 6, state: 12, 0 interleaves) +> [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] Dependent Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:2) (state=10) -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=11) +> [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] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=8) -> [Checker] MUTEX_WAIT(mutex: 1, owner:3) (state=9) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=8) +> [Checker] MUTEX_WAIT(mutex: 0, owner:3) (state=9) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=1) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=8) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=1) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (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: 1, owner:2) (stack depth: 1, state: 1, 0 interleaves) -> [Checker] Execute 2: MUTEX_WAIT(mutex: 1, owner:2) (stack depth: 2, state: 2, 0 interleaves) -> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 3, state: 3, 0 interleaves) -> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 4, state: 4, 0 interleaves) -> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 5, state: 5, 0 interleaves) -> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 6, state: 6, 0 interleaves) -> [Checker] Execute 4: MUTEX_LOCK(mutex: 2, owner:4) (stack depth: 7, state: 7, 0 interleaves) -> [Checker] Execute 4: MUTEX_WAIT(mutex: 2, owner:4) (stack depth: 8, state: 8, 0 interleaves) -> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 2, owner:-1) (stack depth: 9, state: 9, 0 interleaves) -> [Checker] Execute 5: MUTEX_LOCK(mutex: 2, owner:5) (stack depth: 10, state: 10, 0 interleaves) -> [Checker] Execute 5: MUTEX_WAIT(mutex: 2, owner:5) (stack depth: 11, state: 11, 0 interleaves) -> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 2, owner:-1) (stack depth: 12, state: 12, 0 interleaves) +> [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] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 2, owner:-1) (state=9) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=10) +> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=9) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=10) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 2, owner:4) (state=8) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=10) +> [Checker] MUTEX_WAIT(mutex: 1, owner:4) (state=8) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=10) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=7) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=10) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=7) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=10) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=6) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=7) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=6) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:3) (state=5) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=7) +> [Checker] MUTEX_WAIT(mutex: 0, owner:3) (state=5) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=7) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=4) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=3) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=7) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=2) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=7) +> [Checker] MUTEX_WAIT(mutex: 0, owner:2) (state=2) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:2) (state=1) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=7) -> [Checker] Execute 5: MUTEX_LOCK(mutex: 2, owner:5) (stack depth: 7, state: 7, 0 interleaves) -> [Checker] Execute 4: MUTEX_LOCK(mutex: 2, owner:5) (stack depth: 8, state: 14, 0 interleaves) -> [Checker] Execute 5: MUTEX_WAIT(mutex: 2, owner:5) (stack depth: 9, state: 15, 0 interleaves) -> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 2, owner:4) (stack depth: 10, state: 16, 0 interleaves) -> [Checker] Execute 4: MUTEX_WAIT(mutex: 2, owner:4) (stack depth: 11, state: 17, 0 interleaves) -> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 2, owner:-1) (stack depth: 12, state: 18, 0 interleaves) +> [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] Dependent Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 2, owner:4) (state=16) -> [Checker] MUTEX_WAIT(mutex: 2, owner:4) (state=17) +> [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] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=14) -> [Checker] MUTEX_WAIT(mutex: 2, owner:5) (state=15) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=14) +> [Checker] MUTEX_WAIT(mutex: 1, owner:5) (state=15) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=7) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=14) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=7) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=14) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=6) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=7) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=6) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:3) (state=5) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=7) +> [Checker] MUTEX_WAIT(mutex: 0, owner:3) (state=5) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=7) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=4) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=3) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=7) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=2) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=7) +> [Checker] MUTEX_WAIT(mutex: 0, owner:2) (state=2) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:2) (state=1) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=7) +> [Checker] MUTEX_LOCK(mutex: 0, owner:2) (state=1) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=7) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=3) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=3) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=4) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=2) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) +> [Checker] MUTEX_WAIT(mutex: 0, owner:2) (state=2) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=4) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:2) (state=1) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=4) -> [Checker] Execute 3: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 1, state: 1, 0 interleaves) -> [Checker] Execute 2: MUTEX_LOCK(mutex: 1, owner:3) (stack depth: 2, state: 20, 0 interleaves) -> [Checker] Execute 3: MUTEX_WAIT(mutex: 1, owner:3) (stack depth: 3, state: 21, 0 interleaves) -> [Checker] Execute 3: MUTEX_UNLOCK(mutex: 1, owner:2) (stack depth: 4, state: 22, 0 interleaves) -> [Checker] Execute 2: MUTEX_WAIT(mutex: 1, owner:2) (stack depth: 5, state: 23, 0 interleaves) -> [Checker] Execute 2: MUTEX_UNLOCK(mutex: 1, owner:-1) (stack depth: 6, state: 24, 0 interleaves) -> [Checker] Execute 4: MUTEX_LOCK(mutex: 2, owner:4) (stack depth: 7, state: 25, 0 interleaves) -> [Checker] Execute 4: MUTEX_WAIT(mutex: 2, owner:4) (stack depth: 8, state: 26, 0 interleaves) -> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 2, owner:-1) (stack depth: 9, state: 27, 0 interleaves) -> [Checker] Execute 5: MUTEX_LOCK(mutex: 2, owner:5) (stack depth: 10, state: 28, 0 interleaves) -> [Checker] Execute 5: MUTEX_WAIT(mutex: 2, owner:5) (stack depth: 11, state: 29, 0 interleaves) -> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 2, owner:-1) (stack depth: 12, state: 30, 0 interleaves) +> [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] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 2, owner:-1) (state=27) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=28) +> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=27) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=28) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 2, owner:4) (state=26) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=28) +> [Checker] MUTEX_WAIT(mutex: 1, owner:4) (state=26) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=28) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=25) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=28) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=25) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=28) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=24) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=25) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=24) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=23) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=25) +> [Checker] MUTEX_WAIT(mutex: 0, owner:2) (state=23) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:2) (state=22) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=25) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:2) (state=22) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:3) (state=21) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=25) +> [Checker] MUTEX_WAIT(mutex: 0, owner:3) (state=21) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=20) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=25) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=20) +> [Checker] MUTEX_LOCK(mutex: 1, owner:4) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=1) -> [Checker] MUTEX_LOCK(mutex: 2, owner:4) (state=25) -> [Checker] Execute 5: MUTEX_LOCK(mutex: 2, owner:5) (stack depth: 7, state: 25, 0 interleaves) -> [Checker] Execute 4: MUTEX_LOCK(mutex: 2, owner:5) (stack depth: 8, state: 32, 0 interleaves) -> [Checker] Execute 5: MUTEX_WAIT(mutex: 2, owner:5) (stack depth: 9, state: 33, 0 interleaves) -> [Checker] Execute 5: MUTEX_UNLOCK(mutex: 2, owner:4) (stack depth: 10, state: 34, 0 interleaves) -> [Checker] Execute 4: MUTEX_WAIT(mutex: 2, owner:4) (stack depth: 11, state: 35, 0 interleaves) -> [Checker] Execute 4: MUTEX_UNLOCK(mutex: 2, owner:-1) (stack depth: 12, state: 36, 0 interleaves) +> [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] Dependent Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 2, owner:4) (state=34) -> [Checker] MUTEX_WAIT(mutex: 2, owner:4) (state=35) +> [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] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=32) -> [Checker] MUTEX_WAIT(mutex: 2, owner:5) (state=33) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=32) +> [Checker] MUTEX_WAIT(mutex: 1, owner:5) (state=33) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=25) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=32) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=25) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=32) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:-1) (state=24) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=25) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:-1) (state=24) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=23) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=25) +> [Checker] MUTEX_WAIT(mutex: 0, owner:2) (state=23) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:2) (state=22) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=25) +> [Checker] MUTEX_UNLOCK(mutex: 0, owner:2) (state=22) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_WAIT(mutex: 1, owner:3) (state=21) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=25) +> [Checker] MUTEX_WAIT(mutex: 0, owner:3) (state=21) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=20) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=25) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=20) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=25) > [Checker] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=1) -> [Checker] MUTEX_LOCK(mutex: 2, owner:5) (state=25) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=1) +> [Checker] MUTEX_LOCK(mutex: 1, owner:5) (state=25) > [Checker] Dependent Transitions: -> [Checker] MUTEX_UNLOCK(mutex: 1, owner:2) (state=22) -> [Checker] MUTEX_WAIT(mutex: 1, owner:2) (state=23) +> [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] INDEPENDENT Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=20) -> [Checker] MUTEX_WAIT(mutex: 1, owner:3) (state=21) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=20) +> [Checker] MUTEX_WAIT(mutex: 0, owner:3) (state=21) > [Checker] Dependent Transitions: -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=1) -> [Checker] MUTEX_LOCK(mutex: 1, owner:3) (state=20) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (state=1) +> [Checker] MUTEX_LOCK(mutex: 0, owner:3) (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 diff --git a/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp b/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp index 648024aa78..52e2595aa2 100644 --- a/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp +++ b/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp @@ -49,7 +49,6 @@ static void master() /* Create the requested amount of actors pairs. Each pair has a specific mutex and cell in `result`. */ int result[cfg_actor_count.get()]; - sg4::MutexPtr mutex = sg4::Mutex::create(); for (int i = 0; i < cfg_actor_count; i++) { result[i] = 0; sg4::MutexPtr mutex = sg4::Mutex::create(); -- 2.20.1