[gdb/testsuite] Fix gdb.threads/watchpoint-fork.exp race
authorTom de Vries <tdevries@suse.de>
Wed, 29 Jan 2020 07:48:53 +0000 (08:48 +0100)
committerTom de Vries <tdevries@suse.de>
Wed, 29 Jan 2020 07:48:53 +0000 (08:48 +0100)
I ran into:
...
Thread 3.1 "watchpoint-fork" hit Breakpoint 3, marker () at \
  watchpoint-fork-mt.c:42^M
42      }^M
(gdb) parent2: 1945^M

FAIL: gdb.threads/watchpoint-fork.exp: child: multithreaded: breakpoint (A) \
  after the second fork (timeout)
...
The problem is that the FAILing gdb_test expects '(gdb) ' to be the last thing
printed, but the inferior prints something after that.

A similar FAIL is described in the sources in watchpoint-fork-parent.c:
...
      printf ("child%d: %d\n", nr, (int) getpid ());
      /* Delay to get both the "child%d" and "parent%d" message printed
        without a race breaking expect by its endless wait on `$gdb_prompt$':
         Breakpoint 3, marker () at watchpoint-fork.c:33
         33      }
         (gdb) parent2: 14223  */
      i = sleep (1);
...

I noticed that while the executables print output, the output is not verified in
the test-case, so it's merely debug output.

Fix this by:
- guarding the prints in the executables (as well as related
  sleep and setbuf calls) with #if DEBUG, and
- compiling by default with DEBUG=0.

gdb/testsuite/ChangeLog:

2020-01-29  Tom de Vries  <tdevries@suse.de>

* gdb.threads/watchpoint-fork-child.c: Guard prints with #if DEBUG.
* gdb.threads/watchpoint-fork-mt.c: Same.
* gdb.threads/watchpoint-fork-parent.c: Same.
* gdb.threads/watchpoint-fork-st.c: Same.
* gdb.threads/watchpoint-fork.exp: Compile with DEBUG=0.

Change-Id: I63efd4c7771f96b5f5cd87ef2ab36795484ae2be

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/watchpoint-fork-child.c
gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
gdb/testsuite/gdb.threads/watchpoint-fork-parent.c
gdb/testsuite/gdb.threads/watchpoint-fork-st.c
gdb/testsuite/gdb.threads/watchpoint-fork.exp

index 4fd5dc8333066086389dd754c19ec5d123f005e7..6559b7de0e6c40d8afcc1d0a145769773152171f 100644 (file)
@@ -1,3 +1,11 @@
+2020-01-29  Tom de Vries  <tdevries@suse.de>
+
+       * gdb.threads/watchpoint-fork-child.c: Guard prints with #if DEBUG.
+       * gdb.threads/watchpoint-fork-mt.c: Same.
+       * gdb.threads/watchpoint-fork-parent.c: Same.
+       * gdb.threads/watchpoint-fork-st.c: Same.
+       * gdb.threads/watchpoint-fork.exp: Compile with DEBUG=0.
+
 2020-01-27  Luis Machado  <luis.machado@linaro.org>
 
        * gdb.base/step-over-syscall.exp (setup): Check if we're already
index 1da75c9f3522952045f494dfa39f3fbcffdc55de..96860bb95daddd07712340193be0912da60737c8 100644 (file)
@@ -59,7 +59,9 @@ forkoff (int nr)
     case -1:
       assert (0);
     default:
+#if DEBUG
       printf ("parent%d: %d\n", nr, (int) child);
+#endif
 
       /* Sleep for a while to possibly get incorrectly ATTACH_THREADed by GDB
         tracing the child fork with no longer valid thread/lwp entries of the
@@ -95,7 +97,9 @@ forkoff (int nr)
 
       _exit (0);
     case 0:
+#if DEBUG
       printf ("child%d: %d\n", nr, (int) getpid ());
+#endif
 
       /* Let the parent signal us about its success.  Be careful of races.  */
 
index 4b195f97b1824980d196815b259a612a29a2a4f3..7b1bbf4797800b49d470452dcab46e8f6d4b6508 100644 (file)
@@ -114,8 +114,10 @@ main (void)
   int i;
   void *thread_result;
 
+#if DEBUG
   setbuf (stdout, NULL);
   printf ("main: %d\n", (int) gettid ());
+#endif
 
   /* General hardware breakpoints and watchpoints validity.  */
   marker ();
index 511c9511bbd5e1dae0b5e1cfb0083bf646927e5f..2b325b07a8a39c6bda8d378e2dbcdf431b0ff24e 100644 (file)
@@ -40,6 +40,7 @@ forkoff (int nr)
     case -1:
       assert (0);
     case 0:
+#if DEBUG
       printf ("child%d: %d\n", nr, (int) getpid ());
       /* Delay to get both the "child%d" and "parent%d" message printed without
         a race breaking expect by its endless wait on `$gdb_prompt$':
@@ -48,6 +49,7 @@ forkoff (int nr)
         (gdb) parent2: 14223  */
       i = sleep (1);
       assert (i == 0);
+#endif
 
       /* We must not get caught here (against a forgotten breakpoint).  */
       var++;
@@ -55,11 +57,13 @@ forkoff (int nr)
 
       _exit (exit_code);
     default:
+#if DEBUG
       printf ("parent%d: %d\n", nr, (int) child);
       /* Delay to get both the "child%d" and "parent%d" message printed, see
         above.  */
       i = sleep (1);
       assert (i == 0);
+#endif
 
       pid_got = wait (&status);
       assert (pid_got == child);
index b75deb6228fb630aee28b7206987ea66d89f35b7..8a7caec8872ec4f3429220caa21e310ca0d81bea 100644 (file)
@@ -40,8 +40,10 @@ mark_exit (void)
 int
 main (void)
 {
+#if DEBUG
   setbuf (stdout, NULL);
   printf ("main: %d\n", (int) getpid ());
+#endif
 
   /* General hardware breakpoints and watchpoints validity.  */
   marker ();
index 5f38fca8e21f103a0c111694c02f61cd2f0756c6..6500c0d052099138f2fd5a720ab620bbe99046f5 100644 (file)
 
 set testfile watchpoint-fork
 
+# Set DEBUG to 0 or 1 in sources
+set debug 0
+
 proc test {type symbol} {
+    global debug
     with_test_prefix "$type" {
        global testfile subdir srcdir gdb_prompt
 
@@ -30,7 +34,8 @@ proc test {type symbol} {
            set srcfile_main ${testfile}-st.c
            if {[build_executable $testfile.exp $executable \
                     [list $srcfile_main ${testfile}-${type}.c] \
-                    [list debug additional_flags=-D$symbol]] == -1} {
+                    [list debug additional_flags=-D$symbol \
+                         additional_flags=-DDEBUG=$debug]] == -1} {
                return -1
            }
 
@@ -96,7 +101,11 @@ proc test {type symbol} {
        with_test_prefix "multithreaded" {
            set executable ${testfile}-${type}-mt
            set srcfile_main ${srcdir}/${subdir}/${testfile}-mt.c
-           if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" [standard_output_file ${executable}] executable [list debug "additional_flags=-D$symbol -DTHREAD"]] != "" } {
+           if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" \
+                     [standard_output_file ${executable}] executable \
+                     [list debug "additional_flags=-D$symbol" \
+                          "additional_flags=-DDEBUG=$debug" \
+                          "-DTHREAD"]] != "" } {
                untested "failed to compile"
                return
            }