about summary refs log tree commit diff
path: root/externals/register.patch
blob: 6dae0e0d71627e80f88688d7c3f007ca42b776f5 (plain) (blame)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
diff -rc db-4.4.16.NC-orig/env/env_register.c db-4.4.16.NC/env/env_register.c
*** db-4.4.16.NC-orig/env/env_register.c	2005-10-07 22:21:27.000000000 +0200
--- db-4.4.16.NC/env/env_register.c	2005-12-08 17:16:44.000000000 +0100
***************
*** 217,226 ****
  		if (nr != PID_LEN)
  			goto corrupt;
  
! 		if (FLD_ISSET(
! 		    dbenv->verbose, DB_VERB_REGISTER) && PID_ISEMPTY(buf)) {
  			__db_msg(dbenv, "%02u: EMPTY", lcnt);
! 			continue;
  		}
  
  		/*
--- 217,226 ----
  		if (nr != PID_LEN)
  			goto corrupt;
  
!                 if (PID_ISEMPTY(buf)) {
!                     if (FLD_ISSET(dbenv->verbose, DB_VERB_REGISTER))
  			__db_msg(dbenv, "%02u: EMPTY", lcnt);
!                     continue;
  		}
  
  		/*
diff -rc db-4.4.16.NC-orig/test/env012.tcl db-4.4.16.NC/test/env012.tcl
*** db-4.4.16.NC-orig/test/env012.tcl	2005-11-02 21:27:45.000000000 +0100
--- db-4.4.16.NC/test/env012.tcl	2005-12-08 17:21:19.000000000 +0100
***************
*** 168,173 ****
--- 168,219 ----
  	logcheckfails $testdir/env$tnum.log.p2 DB_RUNRECOVERY
  	logcheck $testdir/env$tnum.log.p3
  
+         # Regression test: check that recovery doesn't run if there is
+ 	# a "X   " slot in the registry.
+ 	puts "\tEnv$tnum.f: Multiple processes can join with -register -recover."
+ 
+         # Make sure that we have at least 2 "X   " slots in the registry.
+ 	puts "\t\tEnv$tnum.f1: Start process 1."
+ 	set p1 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ 	    $testdir/env$tnum.log.p1 \
+ 	    $testdir $testfile PUT $key $data RECOVER 1 &]
+ 
+ 	puts "\t\tEnv$tnum.f2: Start process 2."
+ 	set p2 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ 	    $testdir/env$tnum.log.p2 \
+ 	    $testdir $testfile PUT $key $data RECOVER 1 &]
+ 
+ 	watch_procs $p1 1 120
+ 	watch_procs $p2 1 120
+ 
+ 	logcheck $testdir/env$tnum.log.p1
+ 	logcheck $testdir/env$tnum.log.p2
+     
+         # Start a process.  It should not run recovery.  Under the bug
+ 	# we're testing for, it would, because it would get an
+         # exclusive lock on the first "X    " slot.
+ 	puts "\t\tEnv$tnum.f3: Start process 3."
+ 	set p3 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ 	    $testdir/env$tnum.log.p3 \
+ 	    $testdir $testfile PUT $key $data RECOVER 10 &]
+ 
+         tclsleep 2
+     
+         # Start another process.  It should not run recovery either.
+         # The bug would cause it to run recovery because it would get
+         # an exclusive lock on the second "X    " slot.  This would
+         # cause p3 to panic.
+ 	puts "\t\tEnv$tnum.f4: Start process 4."
+ 	set p4 [exec $tclsh_path $test_path/wrap.tcl envscript.tcl \
+ 	    $testdir/env$tnum.log.p4 \
+ 	    $testdir $testfile PUT $key $data RECOVER 10 &]
+ 
+ 	watch_procs $p3 1 120
+ 	watch_procs $p4 1 120
+ 
+ 	# Check log files for failures.
+ 	logcheck $testdir/env$tnum.log.p3
+ 	logcheck $testdir/env$tnum.log.p4
  }
  
  # Check log file and report failures with FAIL.  Use this when