All of lore.kernel.org
 help / color / mirror / Atom feed
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.

       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.