summaryrefslogtreecommitdiff
path: root/tests/testsuite.patch
blob: e0c6bb35ac38c46b4bcf0ce6cf585fba7cd05378 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
--- testsuite	2015-02-11 17:19:21.654646439 -0800
+++ testsuite	2015-02-11 17:15:03.810653032 -0800
@@ -4669,6 +4669,73 @@
   fi
   exec 6<&-
   wait
+elif test $at_jobs -ne 1 &&
+     test "$IS_WIN32" = "yes"; then
+  # FIFO job dispatcher.
+  trap 'at_pids=
+	for at_pid in `jobs -p`; do
+	  at_pids="$at_pids $at_job_group$at_pid"
+	done
+	if test -n "$at_pids"; then
+	  at_sig=TSTP
+	  test "${TMOUT+set}" = set && at_sig=STOP
+	  kill -$at_sig $at_pids 2>/dev/null
+	fi
+	kill -STOP $$
+	test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP
+
+  echo
+  # Turn jobs into a list of numbers, starting from 1.
+  running_jobs="`pwd`/tests/jobdispatcher"
+  mkdir -p $running_jobs
+  at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p`
+
+  set X $at_joblist
+  shift
+  for at_group in $at_groups; do
+    $at_job_control_on 2>/dev/null
+    (
+      # Start one test group.
+      $at_job_control_off
+      touch $running_jobs/$at_group
+      trap 'set +x; set +e
+	    trap "" PIPE
+	    echo stop > "$at_stop_file"
+	    rm -f $running_jobs/$at_group
+	    as_fn_exit 141' PIPE
+      at_fn_group_prepare
+      if cd "$at_group_dir" &&
+	 at_fn_test $at_group &&
+	 . "$at_test_source"
+      then :; else
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
+$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
+	at_failed=:
+      fi
+      rm -f $running_jobs/$at_group
+      at_fn_group_postprocess
+    ) &
+    $at_job_control_off
+    shift # Consume one token.
+    if test $# -gt 0; then :; else
+      while [ "`ls -l $running_jobs 2>/dev/null | wc -l`" -gt "$at_jobs" ]; do
+        sleep 0.1
+      done
+      set x $*
+    fi
+    test -f "$at_stop_file" && break
+  done
+  # Read back the remaining ($at_jobs - 1) tokens.
+  set X $at_joblist
+  shift
+  if test $# -gt 0; then
+    shift
+    while [ "`ls -l $running_jobs | wc -l`" -gt 1 ]; do
+      sleep 0.1
+    done
+  fi
+  rmdir $running_jobs
+  wait
 else
   # Run serially, avoid forks and other potential surprises.
   for at_group in $at_groups; do