diff options
-rw-r--r-- | mono/metadata/w32file-unix.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/mono/metadata/w32file-unix.c b/mono/metadata/w32file-unix.c index 819bbba6818..5430744f9d1 100644 --- a/mono/metadata/w32file-unix.c +++ b/mono/metadata/w32file-unix.c @@ -282,17 +282,23 @@ _wapi_open (const gchar *pathname, gint flags, mode_t mode) located_filename = mono_portability_find_file (pathname, FALSE); if (located_filename == NULL) { MONO_ENTER_GC_SAFE; - fd = open (pathname, flags, mode); + do { + fd = open (pathname, flags, mode); + } while (fd == -1 && errno == EINTR); MONO_EXIT_GC_SAFE; } else { MONO_ENTER_GC_SAFE; - fd = open (located_filename, flags, mode); + do { + fd = open (located_filename, flags, mode); + } while (fd == -1 && errno == EINTR); MONO_EXIT_GC_SAFE; g_free (located_filename); } } else { MONO_ENTER_GC_SAFE; - fd = open (pathname, flags, mode); + do { + fd = open (pathname, flags, mode); + } while (fd == -1 && errno == EINTR); MONO_EXIT_GC_SAFE; if (fd == -1 && (errno == ENOENT || errno == ENOTDIR) && IS_PORTABILITY_SET) { gint saved_errno = errno; @@ -304,7 +310,9 @@ _wapi_open (const gchar *pathname, gint flags, mode_t mode) } MONO_ENTER_GC_SAFE; - fd = open (located_filename, flags, mode); + do { + fd = open (located_filename, flags, mode); + } while (fd == -1 && errno == EINTR); MONO_EXIT_GC_SAFE; g_free (located_filename); } |