From: Robert Hancock <hancockr@shaw.ca>
To: akineko <akineko@gmail.com>, linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: EINTR under Linux
Date: Thu, 17 Jul 2008 19:28:02 -0600 [thread overview]
Message-ID: <487FF1A2.8000404@shaw.ca> (raw)
In-Reply-To: <3f676a38-51a8-4fb6-bf02-c717b21bee06@e39g2000hsf.googlegroups.com>
akineko wrote:
> Hello,
>
> I have a socket program that is running flawlessly under Solaris.
> When I re-compiled it under Linux (CentOS 5.1) and run it, I got the
> following error:
>
> recv() failed: Interrupted system call
>
> This only occurs very infrequently (probably one out of a million
> packets exchanged).
>
> select() in my program is getting EINTR.
>
> From the postings I found in the news group seem suggesting that it is
> due to GC.
>
>> The GC sends signals to each thread which causes them all to enter a stop-the-world state. When the GC
>> is finished, all the threads are resumed. When the threads are resumed, any that were blocked in a
>> blocking system call (like poll()) will return with EINTR. Normally you would just retry the system call.
>
> So, I added to check if the errno == EINTR and now my program seems
> working fine.
>
> //
>
> My question I would like to ask in this group is:
> Does this mean any system call under Linux could return empty-hand
> with EINTR due to GC?
> I usually assume fatal if system call returns -1.
> It is quite painful to check all system-call return status.
>
> My second question is:
> Does this can occur in other OS's? (free-BSD, Solaris, ...)
> Or, is this specific to Linux OS?
I'm not sure what the GC you're referring to is, but I assume it's using
a signal handler for that stop signal. If the signal handler is not
installed with the SA_RESTART flag, then if a system call is interrupted
by that signal it will get EINTR instead of being restarted
automatically. For some system calls, EINTR can still occur, for
example, see:
http://www.opengroup.org/onlinepubs/007908775/xsh/select.html
This is not Linux specific, but the specs allow for some different
behavior between UNIX variants.
next parent reply other threads:[~2008-07-18 1:28 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <3f676a38-51a8-4fb6-bf02-c717b21bee06@e39g2000hsf.googlegroups.com>
2008-07-18 1:28 ` Robert Hancock [this message]
2008-07-21 10:43 ` EINTR under Linux Michael Kerrisk
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=487FF1A2.8000404@shaw.ca \
--to=hancockr@shaw.ca \
--cc=akineko@gmail.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.