* RFA: EINTR in procfs_wait
@ 2001-04-10 8:08 Fernando Nasser
2001-04-10 14:57 ` Kevin Buettner
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Fernando Nasser @ 2001-04-10 8:08 UTC (permalink / raw)
To: gdb-patches
Folks,
I got this patch and it seems that we did forget to test for EINTR in
procfs_wait(). It looks like an "obvious fix" but I would like someone
else to double check it.
Thanks in advance.
Fernando
2001-04-05 Adam Mirowski <Adam.Mirowski@Sun.COM>
Fixed Insight on Solaris. It was not possible to debug a process
because of EINTR "errors".
* procfs.c: (procfs_wait): if proc_wait_for_stop() fails
with EINTR, retry the call.
Index: gdb/procfs.c
------- procfs.c -------
*** /tmp/dMKayx_ Tue Apr 10 16:20:54 2001
--- procfs.c Thu Apr 5 22:21:40 2001
***************
*** 3518,3531 ****
--- 3518,3533 ----
if (retval != PIDGET (inferior_pid)) /* wrong child? */
error ("procfs: couldn't stop process %d: wait returned %d\n",
inferior_pid, retval);
/* FIXME: might I not just use waitpid?
Or try find_procinfo to see if I know about this child? */
}
+ else if (errno == EINTR)
+ goto wait_again;
else
{
/* Unknown error from wait_for_stop. */
proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
}
}
else
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: RFA: EINTR in procfs_wait
2001-04-10 8:08 RFA: EINTR in procfs_wait Fernando Nasser
@ 2001-04-10 14:57 ` Kevin Buettner
2001-04-10 17:41 ` Fernando Nasser
2001-04-11 16:43 ` Michael Snyder
2001-04-11 11:13 ` Andrew Cagney
2001-04-11 16:45 ` Michael Snyder
2 siblings, 2 replies; 7+ messages in thread
From: Kevin Buettner @ 2001-04-10 14:57 UTC (permalink / raw)
To: Fernando Nasser, gdb-patches
Fernando,
I think something like this is needed. I have two concerns though...
1) The patch below is causing the retry counter to be incremented.
It's not clear to me if this is the right thing to do or not.
(I honestly don't know what it should be. I'd have the same
concern if I saw that it wasn't being incremented.)
2) I think EAGAIN should be tested for in addition to EINTR. See
http://sources.redhat.com/ml/gdb/2001-04/msg00078.html . Hmm...
now that I look at this some more, it seems that we might
need another retry test somewhere else as well.
But, regardless, I think this fix ought to go in. We can add any
necessary adjustments later on.
Kevin
On Apr 10, 11:04am, Fernando Nasser wrote:
> Subject: RFA: EINTR in procfs_wait
> Folks,
>
> I got this patch and it seems that we did forget to test for EINTR in
> procfs_wait(). It looks like an "obvious fix" but I would like someone
> else to double check it.
>
> Thanks in advance.
>
> Fernando
>
>
>
> 2001-04-05 Adam Mirowski <Adam.Mirowski@Sun.COM>
>
> Fixed Insight on Solaris. It was not possible to debug a process
> because of EINTR "errors".
> * procfs.c: (procfs_wait): if proc_wait_for_stop() fails
> with EINTR, retry the call.
>
>
> Index: gdb/procfs.c
> ------- procfs.c -------
> *** /tmp/dMKayx_ Tue Apr 10 16:20:54 2001
> --- procfs.c Thu Apr 5 22:21:40 2001
> ***************
> *** 3518,3531 ****
> --- 3518,3533 ----
>
> if (retval != PIDGET (inferior_pid)) /* wrong child? */
> error ("procfs: couldn't stop process %d: wait returned %d\n",
> inferior_pid, retval);
> /* FIXME: might I not just use waitpid?
> Or try find_procinfo to see if I know about this child? */
> }
> + else if (errno == EINTR)
> + goto wait_again;
> else
> {
> /* Unknown error from wait_for_stop. */
> proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
> }
> }
> else
>-- End of excerpt from Fernando Nasser
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: RFA: EINTR in procfs_wait
2001-04-10 14:57 ` Kevin Buettner
@ 2001-04-10 17:41 ` Fernando Nasser
2001-04-11 16:43 ` Michael Snyder
1 sibling, 0 replies; 7+ messages in thread
From: Fernando Nasser @ 2001-04-10 17:41 UTC (permalink / raw)
To: Kevin Buettner; +Cc: Fernando Nasser, gdb-patches
Kevin Buettner wrote:
>
> Fernando,
>
> I think something like this is needed. I have two concerns though...
>
> 1) The patch below is causing the retry counter to be incremented.
> It's not clear to me if this is the right thing to do or not.
> (I honestly don't know what it should be. I'd have the same
> concern if I saw that it wasn't being incremented.)
>
> 2) I think EAGAIN should be tested for in addition to EINTR. See
> http://sources.redhat.com/ml/gdb/2001-04/msg00078.html . Hmm...
> now that I look at this some more, it seems that we might
> need another retry test somewhere else as well.
>
> But, regardless, I think this fix ought to go in. We can add any
> necessary adjustments later on.
>
> Kevin
>
Thank you Kevin.
Michael Snyder is going to take a look at some old procfs.c code to see how it was done back them. I will wait until Thursday before checking it in so he has a chance to do this.
Best regards,
Fernando
> On Apr 10, 11:04am, Fernando Nasser wrote:
> > Subject: RFA: EINTR in procfs_wait
> > Folks,
> >
> > I got this patch and it seems that we did forget to test for EINTR in
> > procfs_wait(). It looks like an "obvious fix" but I would like someone
> > else to double check it.
> >
> > Thanks in advance.
> >
> > Fernando
> >
> >
> >
> > 2001-04-05 Adam Mirowski <Adam.Mirowski@Sun.COM>
> >
> > Fixed Insight on Solaris. It was not possible to debug a process
> > because of EINTR "errors".
> > * procfs.c: (procfs_wait): if proc_wait_for_stop() fails
> > with EINTR, retry the call.
> >
> >
> > Index: gdb/procfs.c
> > ------- procfs.c -------
> > *** /tmp/dMKayx_ Tue Apr 10 16:20:54 2001
> > --- procfs.c Thu Apr 5 22:21:40 2001
> > ***************
> > *** 3518,3531 ****
> > --- 3518,3533 ----
> >
> > if (retval != PIDGET (inferior_pid)) /* wrong child? */
> > error ("procfs: couldn't stop process %d: wait returned %d\n",
> > inferior_pid, retval);
> > /* FIXME: might I not just use waitpid?
> > Or try find_procinfo to see if I know about this child? */
> > }
> > + else if (errno == EINTR)
> > + goto wait_again;
> > else
> > {
> > /* Unknown error from wait_for_stop. */
> > proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
> > }
> > }
> > else
> >-- End of excerpt from Fernando Nasser
--
Fernando Nasser
Red Hat - Toronto E-Mail: fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario M4P 2C9
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: RFA: EINTR in procfs_wait
2001-04-10 8:08 RFA: EINTR in procfs_wait Fernando Nasser
2001-04-10 14:57 ` Kevin Buettner
@ 2001-04-11 11:13 ` Andrew Cagney
2001-04-11 16:45 ` Michael Snyder
2 siblings, 0 replies; 7+ messages in thread
From: Andrew Cagney @ 2001-04-11 11:13 UTC (permalink / raw)
To: Fernando Nasser; +Cc: gdb-patches
Fernando Nasser wrote:
>
> Folks,
>
> I got this patch and it seems that we did forget to test for EINTR in
> procfs_wait(). It looks like an "obvious fix" but I would like someone
> else to double check it.
Anything involving a goto is not an obvious fix :-)
> + goto wait_again;
In theory, procfs_wait() should be able to return (target.h):
/* This is used for target async and extended-async
only. Remote_async_wait() returns this when there is an event
on the inferior, but the rest of the world is not interested in
it. The inferior has not stopped, but has just sent some output
to the console, for instance. In this case, we want to go back
to the event loop and wait there for another event from the
inferior, rather than being stuck in the remote_async_wait()
function. This way the event loop is responsive to other events,
like for instance the user typing. */
TARGET_WAITKIND_IGNORE
and let the event-loop force the reentry. Looking at the code
(infrun.c:handle_inferior_event()):
/* We had an event in the inferior, but we are not interested
in handling it at this level. The lower layers have already
done what needs to be done, if anything. This case can
occur only when the target is async or extended-async. One
of the circumstamces for this to happen is when the
inferior produces output for the console. The inferior has
not stopped, and we are ignoring the event. */
case TARGET_WAITKIND_IGNORE:
ecs->wait_some_more = 1;
return;
I think the restriction that that KIND only apples to
async/extended-async is incorrect.
Andrew
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: RFA: EINTR in procfs_wait
2001-04-10 14:57 ` Kevin Buettner
2001-04-10 17:41 ` Fernando Nasser
@ 2001-04-11 16:43 ` Michael Snyder
1 sibling, 0 replies; 7+ messages in thread
From: Michael Snyder @ 2001-04-11 16:43 UTC (permalink / raw)
To: Kevin Buettner; +Cc: Fernando Nasser, gdb-patches
Kevin Buettner wrote:
>
> Fernando,
>
> I think something like this is needed. I have two concerns though...
>
> 1) The patch below is causing the retry counter to be incremented.
> It's not clear to me if this is the right thing to do or not.
> (I honestly don't know what it should be. I'd have the same
> concern if I saw that it wasn't being incremented.)
I wouldn't be too concerned about it -- the retry counter is
a heuristic (and that's putting it kindly).
> 2) I think EAGAIN should be tested for in addition to EINTR. See
> http://sources.redhat.com/ml/gdb/2001-04/msg00078.html . Hmm...
> now that I look at this some more, it seems that we might
> need another retry test somewhere else as well.
That's not unreasonable, but unlike EINTR, EAGAIN was never in there before,
so that would be a new test. You're welcome to try it out, and so long as
nothing immediately breaks, put it in there. You might want to have it
print a message, so that in case it does break something, we'll know why.
> But, regardless, I think this fix ought to go in. We can add any
> necessary adjustments later on.
I'm inclined to agree, now that I've verified that the old procfs module
used to test for EINTR in a similar-but-not-identical context.
Fernando, you want to do the honors?
> On Apr 10, 11:04am, Fernando Nasser wrote:
> > Subject: RFA: EINTR in procfs_wait
> > Folks,
> >
> > I got this patch and it seems that we did forget to test for EINTR in
> > procfs_wait(). It looks like an "obvious fix" but I would like someone
> > else to double check it.
> >
> > Thanks in advance.
> >
> > Fernando
> >
> >
> >
> > 2001-04-05 Adam Mirowski <Adam.Mirowski@Sun.COM>
> >
> > Fixed Insight on Solaris. It was not possible to debug a process
> > because of EINTR "errors".
> > * procfs.c: (procfs_wait): if proc_wait_for_stop() fails
> > with EINTR, retry the call.
> >
> >
> > Index: gdb/procfs.c
> > ------- procfs.c -------
> > *** /tmp/dMKayx_ Tue Apr 10 16:20:54 2001
> > --- procfs.c Thu Apr 5 22:21:40 2001
> > ***************
> > *** 3518,3531 ****
> > --- 3518,3533 ----
> >
> > if (retval != PIDGET (inferior_pid)) /* wrong child? */
> > error ("procfs: couldn't stop process %d: wait returned %d\n",
> > inferior_pid, retval);
> > /* FIXME: might I not just use waitpid?
> > Or try find_procinfo to see if I know about this child? */
> > }
> > + else if (errno == EINTR)
> > + goto wait_again;
> > else
> > {
> > /* Unknown error from wait_for_stop. */
> > proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
> > }
> > }
> > else
> >-- End of excerpt from Fernando Nasser
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: RFA: EINTR in procfs_wait
2001-04-10 8:08 RFA: EINTR in procfs_wait Fernando Nasser
2001-04-10 14:57 ` Kevin Buettner
2001-04-11 11:13 ` Andrew Cagney
@ 2001-04-11 16:45 ` Michael Snyder
2001-04-13 6:53 ` Fernando Nasser
2 siblings, 1 reply; 7+ messages in thread
From: Michael Snyder @ 2001-04-11 16:45 UTC (permalink / raw)
To: Fernando Nasser; +Cc: gdb-patches
Fernando Nasser wrote:
>
> Folks,
>
> I got this patch and it seems that we did forget to test for EINTR in
> procfs_wait(). It looks like an "obvious fix" but I would like someone
> else to double check it.
OK, I've looked at the old procfs module, and it did indeed have a similar
test in a similar (though not identical) context. The change makes sense
to me. Fernando, do you want to do the honors?
>
> Thanks in advance.
>
> Fernando
>
> 2001-04-05 Adam Mirowski <Adam.Mirowski@Sun.COM>
>
> Fixed Insight on Solaris. It was not possible to debug a process
> because of EINTR "errors".
> * procfs.c: (procfs_wait): if proc_wait_for_stop() fails
> with EINTR, retry the call.
>
> Index: gdb/procfs.c
> ------- procfs.c -------
> *** /tmp/dMKayx_ Tue Apr 10 16:20:54 2001
> --- procfs.c Thu Apr 5 22:21:40 2001
> ***************
> *** 3518,3531 ****
> --- 3518,3533 ----
>
> if (retval != PIDGET (inferior_pid)) /* wrong child? */
> error ("procfs: couldn't stop process %d: wait returned %d\n",
> inferior_pid, retval);
> /* FIXME: might I not just use waitpid?
> Or try find_procinfo to see if I know about this child? */
> }
> + else if (errno == EINTR)
> + goto wait_again;
> else
> {
> /* Unknown error from wait_for_stop. */
> proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
> }
> }
> else
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: RFA: EINTR in procfs_wait
2001-04-11 16:45 ` Michael Snyder
@ 2001-04-13 6:53 ` Fernando Nasser
0 siblings, 0 replies; 7+ messages in thread
From: Fernando Nasser @ 2001-04-13 6:53 UTC (permalink / raw)
To: Michael Snyder; +Cc: gdb-patches
Michael Snyder wrote:
>
> Fernando Nasser wrote:
> >
> > Folks,
> >
> > I got this patch and it seems that we did forget to test for EINTR in
> > procfs_wait(). It looks like an "obvious fix" but I would like someone
> > else to double check it.
>
> OK, I've looked at the old procfs module, and it did indeed have a similar
> test in a similar (though not identical) context. The change makes sense
> to me. Fernando, do you want to do the honors?
>
I checked Adam's patch in.
Fernando
> >
> > Thanks in advance.
> >
> > Fernando
> >
> > 2001-04-05 Adam Mirowski <Adam.Mirowski@Sun.COM>
> >
> > Fixed Insight on Solaris. It was not possible to debug a process
> > because of EINTR "errors".
> > * procfs.c: (procfs_wait): if proc_wait_for_stop() fails
> > with EINTR, retry the call.
> >
> > Index: gdb/procfs.c
> > ------- procfs.c -------
> > *** /tmp/dMKayx_ Tue Apr 10 16:20:54 2001
> > --- procfs.c Thu Apr 5 22:21:40 2001
> > ***************
> > *** 3518,3531 ****
> > --- 3518,3533 ----
> >
> > if (retval != PIDGET (inferior_pid)) /* wrong child? */
> > error ("procfs: couldn't stop process %d: wait returned %d\n",
> > inferior_pid, retval);
> > /* FIXME: might I not just use waitpid?
> > Or try find_procinfo to see if I know about this child? */
> > }
> > + else if (errno == EINTR)
> > + goto wait_again;
> > else
> > {
> > /* Unknown error from wait_for_stop. */
> > proc_error (pi, "target_wait (wait_for_stop)", __LINE__);
> > }
> > }
> > else
--
Fernando Nasser
Red Hat Canada Ltd. E-Mail: fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario M4P 2C9
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2001-04-13 6:53 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-04-10 8:08 RFA: EINTR in procfs_wait Fernando Nasser
2001-04-10 14:57 ` Kevin Buettner
2001-04-10 17:41 ` Fernando Nasser
2001-04-11 16:43 ` Michael Snyder
2001-04-11 11:13 ` Andrew Cagney
2001-04-11 16:45 ` Michael Snyder
2001-04-13 6:53 ` Fernando Nasser
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox