summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Chastain <mec.gnu@mindspring.com>2003-07-29 21:51:25 +0000
committerMichael Chastain <mec.gnu@mindspring.com>2003-07-29 21:51:25 +0000
commitdab940e5c5ddb1764c1ad9abc391f406f52921d4 (patch)
tree86be76ca406036953868ebda3eefe353df41dce0
parent07ded7ffe41cb9b1e29a7ae6ce94ea13dc1f9f1f (diff)
downloadgdb-dab940e5c5ddb1764c1ad9abc391f406f52921d4.tar.gz
2003-07-29 Michael Chastain <mec@shout.net>
* gdb.threads/tls.c (spin): Check errno only if sem_wait actually failed. (do_pass): Likewise. * gdb.threads/tls.exp: Always initialize no_of_threads.
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/gdb.threads/tls.c67
-rw-r--r--gdb/testsuite/gdb.threads/tls.exp1
3 files changed, 41 insertions, 34 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 4bcac1be586..cf8bf89867f 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2003-07-29 Michael Chastain <mec@shout.net>
+
+ * gdb.threads/tls.c (spin): Check errno only if sem_wait
+ actually failed.
+ (do_pass): Likewise.
+ * gdb.threads/tls.exp: Always initialize no_of_threads.
+
2003-07-27 Daniel Jacobowitz <drow@mvista.com>
* gdb.threads/print-threads.exp (test_all_threads): Loosen KFAIL
diff --git a/gdb/testsuite/gdb.threads/tls.c b/gdb/testsuite/gdb.threads/tls.c
index c4f6a30432c..9b2145e652f 100644
--- a/gdb/testsuite/gdb.threads/tls.c
+++ b/gdb/testsuite/gdb.threads/tls.c
@@ -89,26 +89,28 @@ void *spin( vp )
fprintf (stderr, "th %d post on tell main\n", me);
#endif
- do
+ while (1)
{
- errno = 0;
#ifdef START_DEBUG
fprintf (stderr, "th %d start wait on tell_thread\n", me);
#endif
- if (sem_wait (&tell_thread) == -1)
- {
- if (errno != EINTR)
- {
- fprintf (stderr, "th %d wait on sem tell_thread failed\n", me);
- print_error ();
- return;
- }
+ if (sem_wait (&tell_thread) == 0)
+ break;
+
+ if (errno == EINTR)
+ {
#ifdef START_DEBUG
- fprintf (stderr, "th %d wait tell_thread got EINTR, rewaiting\n", me);
+ fprintf (stderr, "th %d wait tell_thread got EINTR, rewaiting\n", me);
#endif
+ continue;
+ }
+ else
+ {
+ fprintf (stderr, "th %d wait on sem tell_thread failed\n", me);
+ print_error ();
+ return;
}
}
- while (errno == EINTR);
#ifdef START_DEBUG
fprintf (stderr, "th %d Wait on tell_thread\n", me);
@@ -151,33 +153,30 @@ do_pass()
}
for( i = 0; i < N_THREADS; i++ )
- {
- do
- {
- errno = 0;
-
-#ifdef START_DEBUG
- fprintf (stderr, "main %d start wait on tell_main\n", i);
-#endif
- if (sem_wait (&tell_main) == -1)
- {
- if (errno != EINTR)
- {
- fprintf (stderr, "main %d wait on sem tell_main failed\n", i);
- print_error ();
- return;
- }
+ {
+ while (1)
+ {
#ifdef START_DEBUG
- fprintf (stderr, "main %d wait tell_main got EINTR, rewaiting\n", i);
+ fprintf (stderr, "main %d start wait on tell_main\n", i);
#endif
- }
- }
- while (errno == EINTR);
+ if (sem_wait (&tell_main) == 0)
+ break;
+ if (errno == EINTR)
+ {
#ifdef START_DEBUG
- fprintf (stderr, "main %d wait on tell_main\n",i);
+ fprintf (stderr, "main %d wait tell_main got EINTR, rewaiting\n", i);
#endif
- }
+ continue;
+ }
+ else
+ {
+ fprintf (stderr, "main %d wait on sem tell_main failed\n", i);
+ print_error ();
+ return;
+ }
+ }
+ }
#ifdef START_DEBUG
fprintf (stderr, "main done waiting on tell_main\n");
diff --git a/gdb/testsuite/gdb.threads/tls.exp b/gdb/testsuite/gdb.threads/tls.exp
index 53376264e51..3f74993daa0 100644
--- a/gdb/testsuite/gdb.threads/tls.exp
+++ b/gdb/testsuite/gdb.threads/tls.exp
@@ -212,6 +212,7 @@ check_thread_local "third"
gdb_test "continue" ".*Breakpoint 3.*still alive.*" "continue to synch point"
+set no_of_threads 0
send_gdb "info thread\n"
gdb_expect {
-re "^info thread\[ \t\r\n\]+(\[0-9\]+) Thread.*$gdb_prompt $" {