Retry splice() syscall on EINTR
[project/cgi-io.git] / main.c
diff --git a/main.c b/main.c
index 95a62b827011ce911967705c21dae5180c5ac70d..e55051e3bd01b16584a40cc15a9e4f28cf351c73 100644 (file)
--- a/main.c
+++ b/main.c
@@ -672,7 +672,7 @@ main_backup(int argc, char **argv)
 
                do {
                        len = splice(fds[0], NULL, 1, NULL, READ_BLOCK, SPLICE_F_MORE);
-               } while (len > 0);
+               } while (len > 0 || (len == -1 && errno == EINTR));
 
                waitpid(pid, &status, 0);
 
@@ -836,7 +836,7 @@ main_exec(int argc, char **argv)
 
                do {
                        len = splice(fds[0], NULL, 1, NULL, READ_BLOCK, SPLICE_F_MORE);
-               } while (len > 0);
+               } while (len > 0 || (len == -1 && errno == EINTR));
 
                waitpid(pid, &status, 0);