This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: RFA: EINTR in procfs_wait


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]