cmap-dispatch-deadlock.sh.in 980 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!@BASHPATH@
  2. export TIMEOUT=600
  3. export PID=$$
  4. up_to=200
  5. rec_plist() {
  6. if [ "$2" == "" ];then
  7. pl="`ps ax -o pid= -o ppid= -o comm=`"
  8. else
  9. pl=$2
  10. fi
  11. list=`echo "$pl" | egrep "^ *[0-9]+ +$1" | awk '{ print $1 }'`
  12. tmplist=$list
  13. for i in $tmplist;do
  14. [ "$i" != "$1" ] && [ "$i" != "$$" ] && list="$list "`rec_plist $i "$pl"`
  15. done
  16. echo $list
  17. }
  18. rec_pkill() {
  19. kill -9 `rec_plist "$1"` 2> /dev/null
  20. }
  21. exit_timeout() {
  22. echo "ERR: Timeout. Test failed $PID"
  23. rec_pkill "$$"
  24. exit 1
  25. }
  26. corosync-cmapctl -s test.abd "str" "test" || exit 2
  27. trap exit_timeout SIGUSR1
  28. (sleep $TIMEOUT ; kill -SIGUSR1 $PID) &
  29. wait_list=""
  30. for e in {1..40};do
  31. (for a in `seq 1 $up_to`;do corosync-cmapctl -s test.abd "str" $a ; done) &
  32. wait_list="$wait_list $!"
  33. done
  34. notify_list=""
  35. for i in {1..2};do
  36. sleep 600000 | corosync-cmapctl -t test > /dev/null &
  37. notify_list="$notify_list $!"
  38. done
  39. wait $wait_list
  40. rec_pkill "$$"
  41. echo "OK"
  42. exit 0