PR# 13742 Many library routine calls in runtime don't check for errno == EINTR and retry
Problem Report Summary
Submitter: prestoat2000
Category: Runtime
Priority: Medium
Date: 2007/12/10
Class: Bug
Severity: Serious
Number: 13742
Release: 6.1.71223
Confidential: No
Status: Open
Responsible:
Environment: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.8.0.7) Gecko/20060915 Firefox/1.5.0.7
Solaris 9 on SPARC
Synopsis: Many library routine calls in runtime don't check for errno == EINTR and retry
Description
There are a large number of library routines called by the runtime which can fail with errno == EINTR. In such cases, the caller of the library routine should check for errno == EINTR and retry the operation in this case until it either succeeds or returns an errno value other than EINTR, unless signals are blocked (really blocked, not via SIGBLOCK). I believe operations files on NFS-mounted file systems can fail with EINTR, depending on how the the file systems are exported. There are some places in the runtime that already check for EINTR and react appropriately, but many places do not check. I recommend constructing (or hopefully finding on the web) a list of routines that can fail with EINTR and then fixing all calls to these routines in the runtime. Here are some few specific examples of such routines: accept access chdir chmod chown close closedir cond_wait connect dup, dup2 execl, execv, execle, excve, execlp, execvp fclose fcntl (with F_SETLKW or F_SETLKW64) fflush fgetc fopen, freopen fprintf fputc fread frtruncate fscanf fseek, fseeko fsync fwrite getgrnam, getgrgid, getgrent, fgetgrent, fgetgrent_r getmsg ioctl link nanosleep open pause poll printf putmsg read, readv, pwrite recv, recvfrom, recvmsg scanf select sem_wait, sema_wait semop, semtimedop send, sendto, sendmsg sigpause sigsuspend sigwait stat, lstat system truncate unlink ustat utimes wait waitpid write, writev, pwrite
To Reproduce
Problem Report Interactions