This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch] Fix linux-nat.c new_lp dropped status
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 19 Jul 2010 00:08:53 +0200
- Subject: [patch] Fix linux-nat.c new_lp dropped status
Hi,
while reading the code it seems to me it can drop non-SIGSTOP status in this
case. It can happen only during some racy case while creating a thread,
I have not tried to exploit it.
Does the patch make sense? I have no dependency on it, I just have seen it.
No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.
Thanks,
Jan
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -2288,6 +2288,23 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
linux_ops->to_resume (linux_ops, pid_to_ptid (new_pid),
0, signo);
}
+ else
+ {
+ if (status != 0)
+ {
+ /* We created NEW_LP so it cannot yet contain STATUS. */
+ gdb_assert (new_lp->status == 0);
+
+ /* Save the wait status to report later. */
+ if (debug_linux_nat)
+ fprintf_unfiltered (gdb_stdlog,
+ "LHEW: waitpid of new LWP %ld, "
+ "saving status %s\n",
+ (long) GET_LWP (new_lp->ptid),
+ status_to_str (status));
+ new_lp->status = status;
+ }
+ }
if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog,