[PATCH] prevent retries on fclose/fflush after write errors

Rich Felker dalias at aerifal.cx
Tue Mar 13 15:04:04 UTC 2012


On Tue, Mar 13, 2012 at 01:46:39AM -0400, Mike Frysinger wrote:
> treating EINTR/EAGAIN as unrecoverable is bad behavior for an app.  there are 
> valid ways an app could receive either signal and have it be normal behavior.

Receiving a signal does not result in EINTR. Running a signal handler
that was installed (intentionally) without SA_RESTART is what causes
EINTR.

> having that handling be done in uClibc is not required by POSIX, but it's 
> better imo for uClibc to carry a little bit more code there to provide better 
> reliability to higher layers rather than forcing every userspace app to 
> implement their own retry-on-eagain macros.

Retrying on EAGAIN is simply *wrong*. It makes you consume 100% cpu.
If the file descriptor is set as EAGAIN, it means whoever set it up
wants to ensure that blocking does not happen; emulating blocking with
100% cpu load is the worst possible way to handle this situation! For
stdio, EAGAIN must be treated as a hard error.

Rich


More information about the uClibc mailing list