From da9c7185dfe8cc291176fa0895a346309d6cdd43 Mon Sep 17 00:00:00 2001 From: Kevin Buettner Date: Wed, 21 Nov 2001 21:56:47 +0000 Subject: Fix two ``attach'' related bugs involving threads. --- gdb/lin-lwp.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'gdb/lin-lwp.c') diff --git a/gdb/lin-lwp.c b/gdb/lin-lwp.c index 22d9d74..9931df5 100644 --- a/gdb/lin-lwp.c +++ b/gdb/lin-lwp.c @@ -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 -- cgit v1.1