forked from Imagelibrary/binutils-gdb
Fix two ``attach'' related bugs involving threads.
This commit is contained in:
@@ -352,6 +352,14 @@ lin_lwp_attach_lwp (ptid_t ptid, int verbose)
|
||||
|
||||
gdb_assert (is_lwp (ptid));
|
||||
|
||||
/* Make sure SIGCHLD is blocked. We don't want SIGCHLD events
|
||||
to interrupt either the ptrace() or waitpid() calls below. */
|
||||
if (! sigismember (&blocked_mask, SIGCHLD))
|
||||
{
|
||||
sigaddset (&blocked_mask, SIGCHLD);
|
||||
sigprocmask (SIG_BLOCK, &blocked_mask, NULL);
|
||||
}
|
||||
|
||||
if (verbose)
|
||||
printf_filtered ("[New %s]\n", target_pid_to_str (ptid));
|
||||
|
||||
@@ -383,6 +391,16 @@ lin_lwp_attach_lwp (ptid_t ptid, int verbose)
|
||||
|
||||
lp->stopped = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We assume that the LWP representing the original process
|
||||
is already stopped. Mark it as stopped in the data structure
|
||||
that the lin-lwp layer uses to keep track of threads. Note
|
||||
that this won't have already been done since the main thread
|
||||
will have, we assume, been stopped by an attach from a
|
||||
different layer. */
|
||||
lp->stopped = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user