aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 4bcac1b..cf8bf89 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 c4f6a30..9b2145e 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 5337626..3f74993 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 $" {