From d41b9e8d95b69bd50ec9e6b6267096ad6db5a575 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 16 Aug 2017 22:43:00 -0400 Subject: [PATCH] Recover from EINTR --- runtime.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/runtime.c b/runtime.c index 2f15c8e9..b9633e92 100644 --- a/runtime.c +++ b/runtime.c @@ -5686,10 +5686,15 @@ int read_from_port(port_type *p) FILE *fp = p->fp; char *buf = p->mem_buf; - rv = fread(buf, sizeof(char), CYC_IO_BUF_LEN, fp); - //if (NULL == fgets(buf, CYC_IO_BUF_LEN, fp)) { - // rv = 0; - //} + while(1) { + errno = 0; + rv = fread(buf, sizeof(char), CYC_IO_BUF_LEN, fp); + + if (rv != 0 || !ferror(fp) || errno != EINTR) { + break; + } + } + p->mem_buf_len = rv; p->buf_idx = 0; return rv;