[Mono-bugs] [Bug 470951] New: Most functions in io-portability.c and io.c does not handle EINTR correctly.

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Fri Jan 30 07:02:35 EST 2009


           Summary: Most functions in io-portability.c and io.c does not
                    handle EINTR correctly.
    Classification: Mono
           Product: Mono: Runtime
           Version: 2.2.x
          Platform: 32bit
        OS/Version: Solaris 10
            Status: NEW
          Severity: Minor
          Priority: P5 - None
         Component: io-layer
        AssignedTo: dick at novell.com
        ReportedBy: burkhard.linke at CeBiTec.Uni-Bielefeld.DE
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---

Most functions in the io-layer does not handle EINTR correctly if syscalls
return and indicate and error.

EINTR indicates that the syscall was interrupted by a signal. Since I'm working
with networked filesystems file operation may take some time if the nfs server
is under high load, raising the probability that signals may occur while being
blocked in the syscall.

The result are irreproducible errors. Since EINTR is not handled in the
indented way (restarting the syscalls), the error is propagated to the upper
layers, resulting in IOExceptions.

The attached patches add wrappers to most syscalls in mono/io-layer/io.c and
mono/io-layer/io-portability.c that restart syscalls if they were interrupted
by a signal.

According to the Solaris manpages "lseek" is one of the few syscalls used in
the files that does not return EINTR; so the calls to lseek are not patched.

You should check the files afterwards in case I've missed some syscalls.

Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.

More information about the mono-bugs mailing list