This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[rfa/testsuite] Make pthreads test more robust


I've been seeing about 90% failure rate for gdb.threads/pthreads.exp lately. 
The test which fails is always stopping threads with a control-c.
I spent some time debugging this today; it seems that the course of events
looks something like this:
	- send "continue\n"
	- wait
	- send "\003"
	- read back "Continuing."
	- timeout

Note that, among other things, we never see "continue\n" echoed back to us,
and yet gdb continues anyway.  Obviously something is fishy in timing.  We
also do no reads between the continue and the \003.  My best guess is that
gdb does not get scheduled between the two sends; so waiting for the output
of continue seems like a good idea.

Also, I'm not entirely sure what 'after 1000 [ ... ]' is supposed to do, but
it doesn't seem to delay by any measurable amount of time.  Adding an
additional sleep, so that the process has actually continued before we send
the ^C, lets the test pass.

Is this OK to commit?  With it, the rest of pthreads.exp passes (except for
the last test:
      break common_routine thread 4
Breakpoint 6 at 0x8048666: file ../../../../src-hashtest/gdb/testsuite/gdb.threads/pthreads.c, line 50.
(gdb) PASS: gdb.threads/pthreads.exp: set break at common_routine in thread 2
      continue
Continuing.
Cannot find thread 1024: generic error
(gdb) FAIL: gdb.threads/pthreads.exp: continue to bkpt at common_routine in thread 2
)


-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer

2001-09-28  Daniel Jacobowitz  <drow@mvista.com>

	* gdb.threads/pthreads.exp: Wait for output and delay
	before sending ^C.

Index: pthreads.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.threads/pthreads.exp,v
retrieving revision 1.6
diff -u -r1.6 pthreads.exp
--- pthreads.exp	2001/06/06 18:34:53	1.6
+++ pthreads.exp	2001/09/28 15:30:28
@@ -248,6 +248,15 @@
 
     # Send a continue followed by ^C to the process to stop it.
     send_gdb "continue\n"
+    gdb_expect {
+	-re "Continuing." {
+	    pass "Continue with all threads running"
+	}
+	timeout {
+	    fail "Continue with all threads running (timeout)"
+	}
+    }
+    sleep 1
     set description "Stopped with a ^C"
     after 1000 [send_gdb "\003"]
     gdb_expect {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]