gdbserver/Linux: internal error when killing a process that is already gone
If the process disappears (e.g., killed with "kill -9" from the shell) while it was stopped under GDBserver's control, and the GDBserver tries to kill it, GDBserver asserts: (gdb) shell kill -9 23084 (gdb) kill ... Killing process(es): 23084 /home/pedro/gdb/mygit/src/gdb/gdbserver/linux-low.c:972: A problem internal to GDBserver has been detected. kill_wait_lwp: Assertion `res > 0' failed. ... gdb/gdbserver/ChangeLog: 2015-07-14 Pedro Alves <palves@redhat.com> * linux-low.c (kill_wait_lwp): Don't assert if waitpid fails. Instead, ignore ECHILD, and throw an error for other errnos.
This commit is contained in:
parent
05e83eb1b6
commit
586b02a96f
|
@ -1,3 +1,8 @@
|
|||
2015-07-14 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* linux-low.c (kill_wait_lwp): Don't assert if waitpid fails.
|
||||
Instead, ignore ECHILD, and throw an error for other errnos.
|
||||
|
||||
2015-07-10 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* event-loop.c (struct callback_event) <data>: Change type to
|
||||
|
|
|
@ -1103,7 +1103,10 @@ kill_wait_lwp (struct lwp_info *lwp)
|
|||
res = my_waitpid (lwpid, &wstat, __WCLONE);
|
||||
} while (res > 0 && WIFSTOPPED (wstat));
|
||||
|
||||
gdb_assert (res > 0);
|
||||
/* Even if it was stopped, the child may have already disappeared.
|
||||
E.g., if it was killed by SIGKILL. */
|
||||
if (res < 0 && errno != ECHILD)
|
||||
perror_with_name ("kill_wait_lwp");
|
||||
}
|
||||
|
||||
/* Callback for `find_inferior'. Kills an lwp of a given process,
|
||||
|
|
Loading…
Reference in New Issue