From: Dan Kegel <dank@kegel.com>
To: Grant Taylor <gtaylor+lkml_ihdeh111902@picante.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [rfc] epoll interface change and glibc bits ...
Date: Tue, 19 Nov 2002 09:28:50 -0800 [thread overview]
Message-ID: <3DDA74D2.6080802@kegel.com> (raw)
Grant Taylor wrote:
> Meanwhile, in the more important caveat department (Dan, this will
> appeal to you), I found a while back that signals cause pain with
> epoll.
>
> For example, sometimes TCP reads return EAGAIN when in fact they have
> data. This seems to stem from the case where the signal is found
> before the first segment copy (from tcp.c circa 1425, there's even a
> handy FIXME note there). If you use epoll and get an EAGAIN, you have
> no idea if it was a signal or a real empty socket unless you are also
> very careful to notice when you got a signal during the read.
> ...
> /* We need to check signals first, to get correct SIGURG
> * handling. FIXME: Need to check this doesnt impact 1003.1g
> * and move it down to the bottom of the loop
> */
> if (signal_pending(current)) {
> if (copied)
> break;
> copied = timeo ? sock_intr_errno(timeo) : -EAGAIN;
> break;
> }
eek! Thanks for noticing that!
Jamie wrote:
> Mark's right, it should be EINTR. EAGAIN shouldn't break any
> single-thread user state machines using poll/select, as a non-blocking
> read is always allowed to return EAGAIN for any transient reason.
>
> I'm not sure if EAGAIN can cause a poll() wakeup event to be missed.
> If so, that would be a TCP bug that breaks epoll, and it would also
> break some user state machines using poll/select, when there are
> multiple processes waiting on a socket.
I guess we should scour the sources looking for ways read() and write()
can return EAGAIN, and make sure that there is no chance this causes
a hang in user state machines that rely on epoll. (Sure would be nice
if the Stanford Checker was up to this kind of thing.)
- Dan
next reply other threads:[~2002-11-19 16:58 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-19 17:28 Dan Kegel [this message]
-- strict thread matches above, loose matches on Subject: below --
2002-11-19 19:33 [rfc] epoll interface change and glibc bits Grant Taylor
2002-11-19 19:51 ` Davide Libenzi
2002-11-19 20:57 ` Mark Mielke
2002-11-19 20:54 ` Davide Libenzi
2002-11-19 5:49 Grant Taylor
2002-11-19 6:22 ` Mark Mielke
2002-11-19 15:24 ` Jamie Lokier
[not found] <20021118223125.GB14649@mark.mielke.cc>
2002-11-19 0:23 ` Grant Taylor
2002-11-19 3:58 ` Davide Libenzi
2002-11-19 4:04 ` Mark Mielke
2002-11-18 22:21 Dan Kegel
2002-11-18 23:09 ` Davide Libenzi
2002-11-18 23:39 ` Dan Kegel
2002-11-18 23:20 ` Davide Libenzi
2002-11-18 23:52 ` Dan Kegel
2002-11-18 23:35 ` Davide Libenzi
2002-11-19 0:53 ` Dan Kegel
2002-11-19 1:34 ` Davide Libenzi
2002-11-19 2:08 ` Dan Kegel
2002-11-19 2:04 ` Davide Libenzi
2002-11-19 3:46 ` Edgar Toernig
2002-11-19 4:14 ` Davide Libenzi
2002-11-19 5:35 ` Edgar Toernig
2002-11-19 6:09 ` Mark Mielke
2002-11-19 17:07 ` Davide Libenzi
2002-11-20 1:59 ` Davide Libenzi
2002-11-20 3:09 ` Jamie Lokier
2002-11-20 3:46 ` Davide Libenzi
2002-11-20 4:04 ` Davide Libenzi
2002-11-20 8:01 ` Mark Mielke
2002-11-20 23:19 ` Davide Libenzi
2002-11-20 23:51 ` Mark Mielke
2002-11-20 23:57 ` Davide Libenzi
2002-11-21 0:28 ` Jamie Lokier
2002-11-21 1:23 ` Mark Mielke
2002-11-21 1:20 ` Davide Libenzi
2002-11-21 0:33 ` Mark Mielke
2002-11-21 0:55 ` Jamie Lokier
2002-11-21 1:04 ` Davide Libenzi
2002-11-21 20:08 ` Denis Vlasenko
2002-11-21 16:51 ` Mark Mielke
2002-11-21 17:45 ` Davide Libenzi
2002-11-20 22:04 ` Jamie Lokier
2002-11-20 22:08 ` Davide Libenzi
2002-11-20 23:28 ` Jamie Lokier
2002-11-20 23:33 ` Davide Libenzi
2002-11-20 7:47 ` Mark Mielke
2002-11-19 3:53 ` Mark Mielke
2002-11-18 22:04 Grant Taylor
2002-11-18 22:32 ` Mark Mielke
2002-11-18 23:07 ` Davide Libenzi
2002-11-18 18:40 Grant Taylor
2002-11-18 16:05 Davide Libenzi
2002-11-18 16:12 ` Jakub Jelinek
2002-11-18 16:15 ` Davide Libenzi
2002-11-18 16:18 ` Jakub Jelinek
2002-11-18 16:32 ` Davide Libenzi
2002-11-18 22:22 ` Matthew D. Hall
2002-11-18 17:51 ` Mark Mielke
2002-11-18 18:37 ` Davide Libenzi
2002-11-18 19:59 ` Ulrich Drepper
2002-11-18 21:31 ` Davide Libenzi
2002-11-18 22:56 ` Jamie Lokier
2002-11-18 23:56 ` Davide Libenzi
2002-11-19 1:34 ` Jamie Lokier
2002-11-19 1:50 ` Davide Libenzi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3DDA74D2.6080802@kegel.com \
--to=dank@kegel.com \
--cc=gtaylor+lkml_ihdeh111902@picante.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox