Re: [patch] Fix for internal-error: linux_nat_post_attach_wait: Assertion `pid == new_pid && WIFSTOPPED (status)' failed.

Pedro Alves
2009-10-14T21:16:49Z

On Wednesday 14 October 2009 22:01:05, Paul Pluzhnikov wrote:
> On Wed, Oct 14, 2009 at 12:07 PM, Pedro Alves <pedro@codesourcery.com> wrote:
>
> > Ugh. Happened much more often for me, like 1 in 5...
>
> It's racy. I've seen different frequency of problems depending on
> whether I run kernel 2.6.24 or 2.6.30.
>

Yeah.

> > I don't think you needed the interface change.
>
> Indeed.
>
> > Back to the "simple" variant: The inferior just added is
> > always inferior_ptid/current_inferior(). If you look
> > at fork-child.c:startup_inferior, you'll see bits of
> > code doing exactly what you'd need to do. E.g.:
> >
> > target_terminal_ours ();
> > target_mourn_inferior ();
> > if (WIFEXITED (status))
> > error (_("During startup program exited with code %d."),
> > WIFEXITCODE (status));
> > else if (WIFSIGNALED (status))
> > error (_("During startup program exited with signal ..."),
> > ...);
>
> I don't see above code in fork-child.c (or anywhere else for that
> matter). Are you looking at a local patch?

Well, you won't find that that _exactly_, as it was a
copy-paste-tweak. But I pointed you in the right direction
anyway, it seems. :-)

> Anyway, here is try #3.

Awesome. Almost perfect.

> + delete_lwp (ptid);

FYI, this isn't necessary. linux_nat_mourn_inferior takes
care of deleting all lwps of the inferior being
mourned already.

> + error (_("During startup program exited normally."));
> + else
> + error (_("During startup program exited with code %d."),
> + exit_code);
> + }
> + else if (WIFSIGNALED (status))
> + {
> + int signo = WTERMSIG (status);
> +
> + target_terminal_ours ();
> + target_mourn_inferior ();
> + error (_("During startup program terminated with signal %s, %s."),

I didn't mean to use those strings exactly. Please remove or replace
"During startup" with something else. We're attaching, not starting up.
Sorry, I'll remember that my telepatic module is broken and to be
more specific next time. ;-)

Okay with that fixed.

--
Pedro Alves