This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch/RFC] Fix libstdc++/9533


Hi again,

a couple of comments on Ulrich reply:

That's a common problem.  The in_avail function should, in case the read
buffer is empty, use poll or select.

I think he really mean showmanyc, _not_ in_avail: in_avail can only do
something very simple along the lines (Nathan's code. Soon more about it:
in fact using the code below fixes the 2nd half of 9701 without regressions):


stremsize
in_avail()
{
 streamsize __ret = this->egptr() - this->gptr();
 return (__ret != 0) ? __ret : this->showmanyc();
}

I think using fcntl() to select
non-blocking mode isn't that good since it affects duplicates of the
file descriptor.


if (read-buffer not empty) return true;

  struct pollfd pfd[1];
  pfd[0].fd = ifs.fileno();
  pfd[0].events = POLLIN;
  if (poll (pfd, 1, 0) > 0)
    return true;

return false;


Interesting. However what we really need inside showmanyc is an estimate
of the _number_ of externally available chars.
How possibly poll can return such a number?

Paolo.


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