From b1e534617992314663ca3fa2bfc9f85423334ed3 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 6 Jul 2008 18:28:41 -0500 Subject: [PATCH] More EINTR handling --- vm/os-unix.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/vm/os-unix.c b/vm/os-unix.c index 5b0da5a8d2..48d9a2dea8 100755 --- a/vm/os-unix.c +++ b/vm/os-unix.c @@ -322,8 +322,16 @@ void safe_write(int fd, void *data, size_t size) void safe_read(int fd, void *data, size_t size) { - if(read(fd,data,size) != size) - fatal_error("error reading fd",errno); + ssize_t bytes = read(fd,data,size); + if(bytes < 0) + { + if(errno == EINTR) + safe_read(fd,data,size); + else + fatal_error("error reading fd",errno); + } + else if(bytes != size) + fatal_error("unexpected eof on fd",bytes); } void *stdin_loop(void *arg)