dead003.tcl
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1996, 1997, 1998, 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: dead003.tcl,v 1.8 2000/08/25 14:21:50 sue Exp $
  7. #
  8. # Deadlock Test 3.
  9. # Test DB_LOCK_OLDEST and DB_LOCK_YOUNGEST
  10. # Identical to Test 2 except that we create the region with "detect on
  11. # every wait" with first the "oldest" and then "youngest".
  12. proc dead003 { { procs "2 4 10" } {tests "ring clump" } } {
  13. source ./include.tcl
  14. set detects { oldest youngest }
  15. puts "Dead003: Deadlock detector tests: $detects"
  16. # Create the environment.
  17. foreach d $detects {
  18. env_cleanup $testdir
  19. puts "tDead003.a: creating environment for $d"
  20. set env [berkdb env 
  21.     -create -mode 0644 -home $testdir -lock -lock_detect $d]
  22. error_check_good lock_env:open [is_valid_env $env] TRUE
  23. error_check_good lock_env:close [$env close] 0
  24. foreach t $tests {
  25. set pidlist ""
  26. foreach n $procs {
  27. sentinel_init 
  28. # Fire off the tests
  29. puts "tDead003: $n procs of test $t"
  30. for { set i 0 } { $i < $n } { incr i } {
  31. puts "$tclsh_path
  32.     test_path/ddscript.tcl $testdir 
  33.     $t $i $i $n >& 
  34.     $testdir/dead003.log.$i"
  35. set p [exec $tclsh_path 
  36.     $test_path/wrap.tcl 
  37.     ddscript.tcl 
  38.     $testdir/dead003.log.$i $testdir 
  39.     $t $i $i $n &]
  40. lappend pidlist $p
  41. }
  42. watch_procs 5
  43. # Now check output
  44. set dead 0
  45. set clean 0
  46. set other 0
  47. for { set i 0 } { $i < $n } { incr i } {
  48. set did [open $testdir/dead003.log.$i]
  49. while { [gets $did val] != -1 } {
  50. switch $val {
  51. DEADLOCK { incr dead }
  52. 1 { incr clean }
  53. default { incr other }
  54. }
  55. }
  56. close $did
  57. }
  58. dead_check $t $n $dead $clean $other
  59. #
  60. # If we get here we know we have the
  61. # correct number of dead/clean procs, as
  62. # checked by dead_check above.  Now verify
  63. # that the right process was the one.
  64. puts "tDead003: Verify $d locks were aborted"
  65. set l ""
  66. if { $d == "oldest" } {
  67. set l [expr $n - 1]
  68. }
  69. if { $d == "youngest" } {
  70. set l 0
  71. }
  72. set did [open $testdir/dead003.log.$l]
  73. while { [gets $did val] != -1 } {
  74. error_check_good check_abort 
  75.     $val 1
  76. }
  77. close $did
  78. }
  79. }
  80. fileremove -f $testdir/dd.out
  81. # Remove log files
  82. for { set i 0 } { $i < $n } { incr i } {
  83. fileremove -f $testdir/dead003.log.$i
  84. }
  85. }
  86. }