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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.