Re: Race condition in IPC::Open3 / Mac OS?
Bo Lindbergh [Sat, 20 Jan 2007 02:39:57 +0000 (03:39 +0100)]
Message-Id: <D256CF03-D814-4973-9DF6-60EA4F26FE10@hagernas.com>

p4raw-id: //depot/perl@29894

perlio.c

index 6e2d9e1..9396650 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -3419,9 +3419,15 @@ PerlIOStdio_fill(pTHX_ PerlIO *f)
        if (PerlSIO_fflush(stdio) != 0)
            return EOF;
     }
-    c = PerlSIO_fgetc(stdio);
-    if (c == EOF)
-       return EOF;
+    for (;;) {
+       c = PerlSIO_fgetc(stdio);
+       if (c != EOF)
+           break;
+       if (! PerlSIO_ferror(stdio) || errno != EINTR)
+           return EOF;
+       PERL_ASYNC_CHECK();
+       SETERRNO(0,0);
+    }
 
 #if (defined(STDIO_PTR_LVALUE) && (defined(STDIO_CNT_LVALUE) || defined(STDIO_PTR_LVAL_SETS_CNT)))