30 lines
968 B
Diff
30 lines
968 B
Diff
|
Index: gdb-7.2.50.20110328/gdb/linux-nat.c
|
||
|
===================================================================
|
||
|
--- gdb-7.2.50.20110328.orig/gdb/linux-nat.c 2011-03-28 18:46:16.000000000 +0200
|
||
|
+++ gdb-7.2.50.20110328/gdb/linux-nat.c 2011-03-28 18:47:56.000000000 +0200
|
||
|
@@ -1774,8 +1774,22 @@ get_pending_status (struct lwp_info *lp,
|
||
|
target_signal_to_string (signo));
|
||
|
}
|
||
|
|
||
|
- if (*status == 0 && GET_PID (lp->ptid) == pid_was_stopped)
|
||
|
- *status = W_STOPCODE (SIGSTOP);
|
||
|
+ /* Workaround RHEL-5 kernel which has unreliable PTRACE_DETACH, SIGSTOP (that
|
||
|
+ many TIDs are left unstopped). See RH Bug 496732. */
|
||
|
+ if (GET_PID (lp->ptid) == pid_was_stopped)
|
||
|
+ {
|
||
|
+ int err;
|
||
|
+
|
||
|
+ errno = 0;
|
||
|
+ err = kill_lwp (GET_LWP (lp->ptid), SIGSTOP);
|
||
|
+ if (debug_linux_nat)
|
||
|
+ {
|
||
|
+ fprintf_unfiltered (gdb_stdlog,
|
||
|
+ "SC: lwp kill %d %s\n",
|
||
|
+ err,
|
||
|
+ errno ? safe_strerror (errno) : "ERRNO-OK");
|
||
|
+ }
|
||
|
+ }
|
||
|
|
||
|
return 0;
|
||
|
}
|