blob: 057e9d86e8b8c0e83573a723097f75ad10c1363d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# See the file LICENSE for redistribution information.
#
# Copyright (c) 2009 Oracle. All rights reserved.
#
# $Id$
#
# TEST mut002
# TEST Two-process mutex test.
#
# TEST Allocate and lock a self-blocking mutex. Start another process.
# TEST Try to lock the mutex again -- it will block.
# TEST Unlock the mutex from the other process, and the blocked
# TEST lock should be obtained. Clean up.
# TEST Do another test with a "-process-only" mutex. The second
# TEST process should not be able to unlock the mutex.
proc mut002 { } {
source ./include.tcl
puts "Mut002: Two process mutex test."
# Open an env.
set env [berkdb_env -create -home $testdir]
puts "\tMut002.a: Allocate and lock a mutex."
set mutex [$env mutex -self_block]
error_check_good obtained_lock [$env mutex_lock $mutex] 0
# Start a second process.
puts "\tMut002.b: Start another process."
set p2 [exec $tclsh_path $test_path/wrap.tcl mut002script.tcl\
$testdir/mut002.log $testdir $mutex &]
# Try to lock the mutex again. This will hang until the second
# process unlocks it.
$env mutex_lock $mutex
watch_procs $p2 1 20
# Clean up, and check the log file from process 2.
error_check_good mutex_unlock [$env mutex_unlock $mutex] 0
error_check_good env_close [$env close] 0
# We expect the log file to be empty. If there are any
# messages, report them as failures.
set fd [open $testdir/mut002.log r]
while { [gets $fd line] >= 0 } {
puts "FAIL: unexpected output in log file mut002: $line"
}
close $fd
}
|