| --- a/gdb/gdbserver/thread-db.c |
| +++ b/gdb/gdbserver/thread-db.c |
| @@ -21,6 +21,7 @@ |
| Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| Boston, MA 02110-1301, USA. */ |
| |
| +#include <unistd.h> |
| #include "server.h" |
| |
| #include "linux-low.h" |
| @@ -134,6 +135,7 @@ |
| td_event_msg_t msg; |
| td_err_e err; |
| struct inferior_linux_data *tdata; |
| + int timeout; |
| |
| if (debug_threads) |
| fprintf (stderr, "Thread creation event.\n"); |
| @@ -144,7 +146,13 @@ |
| In the LinuxThreads implementation, this is safe, |
| because all events come from the manager thread |
| (except for its own creation, of course). */ |
| - err = td_ta_event_getmsg (thread_agent, &msg); |
| + for (timeout = 0; timeout < 50000; timeout++) |
| + { |
| + err = td_ta_event_getmsg (thread_agent, &msg); |
| + if (err != TD_NOMSG) |
| + break; |
| + usleep(1000); |
| + } |
| if (err != TD_OK) |
| fprintf (stderr, "thread getmsg err: %s\n", |
| thread_db_err_str (err)); |