From f1b6db221875f6ad30ff0723f2c2302aeab70d0e Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Wed, 4 May 2016 09:22:22 +0000
Subject: [PATCH] unix/file: If write syscall returns because of EINTR then try
 again.

As per PEP-475.
---
 unix/file.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/unix/file.c b/unix/file.c
index 7a23572e1..a7620e079 100644
--- a/unix/file.c
+++ b/unix/file.c
@@ -88,6 +88,14 @@ STATIC mp_uint_t fdfile_write(mp_obj_t o_in, const void *buf, mp_uint_t size, in
     }
     #endif
     mp_int_t r = write(o->fd, buf, size);
+    while (r == -1 && errno == EINTR) {
+        if (MP_STATE_VM(mp_pending_exception) != MP_OBJ_NULL) {
+            mp_obj_t obj = MP_STATE_VM(mp_pending_exception);
+            MP_STATE_VM(mp_pending_exception) = MP_OBJ_NULL;
+            nlr_raise(obj);
+        }
+        r = write(o->fd, buf, size);
+    }
     if (r == -1) {
         *errcode = errno;
         return MP_STREAM_ERROR;
-- 
GitLab