yann@438
|
1 |
--- gdb-6.5/./gdb/gdbserver/thread-db.c.orig 2006-03-15 08:13:29.000000000 -0800
|
yann@438
|
2 |
+++ gdb-6.5/./gdb/gdbserver/thread-db.c 2008-04-01 21:21:23.000000000 -0700
|
yann@96
|
3 |
@@ -21,6 +21,7 @@
|
yann@438
|
4 |
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
yann@438
|
5 |
Boston, MA 02110-1301, USA. */
|
yann@96
|
6 |
|
yann@96
|
7 |
+#include <unistd.h>
|
yann@96
|
8 |
#include "server.h"
|
yann@96
|
9 |
|
yann@96
|
10 |
#include "linux-low.h"
|
yann@438
|
11 |
@@ -134,6 +135,7 @@ thread_db_create_event (CORE_ADDR where)
|
yann@96
|
12 |
td_event_msg_t msg;
|
yann@96
|
13 |
td_err_e err;
|
yann@96
|
14 |
struct inferior_linux_data *tdata;
|
yann@96
|
15 |
+ int timeout;
|
yann@96
|
16 |
|
yann@96
|
17 |
if (debug_threads)
|
yann@96
|
18 |
fprintf (stderr, "Thread creation event.\n");
|
yann@438
|
19 |
@@ -144,7 +146,13 @@ thread_db_create_event (CORE_ADDR where)
|
yann@96
|
20 |
In the LinuxThreads implementation, this is safe,
|
yann@96
|
21 |
because all events come from the manager thread
|
yann@96
|
22 |
(except for its own creation, of course). */
|
yann@96
|
23 |
- err = td_ta_event_getmsg (thread_agent, &msg);
|
yann@96
|
24 |
+ for (timeout = 0; timeout < 50000; timeout++)
|
yann@96
|
25 |
+ {
|
yann@96
|
26 |
+ err = td_ta_event_getmsg (thread_agent, &msg);
|
yann@96
|
27 |
+ if (err != TD_NOMSG)
|
yann@96
|
28 |
+ break;
|
yann@96
|
29 |
+ usleep(1000);
|
yann@96
|
30 |
+ }
|
yann@96
|
31 |
if (err != TD_OK)
|
yann@96
|
32 |
fprintf (stderr, "thread getmsg err: %s\n",
|
yann@96
|
33 |
thread_db_err_str (err));
|