File 0193-run_erl-Fix-error-handling-in-sf_close-and-during-pt.patch of Package erlang
From b65da429eb5c1f680c637480105f122befc53d61 Mon Sep 17 00:00:00 2001
From: Marko Turk <marko@markoturk.info>
Date: Sat, 22 Jul 2017 21:47:56 +0200
Subject: [PATCH] run_erl: Fix error handling in sf_close and during pty master
read
---
erts/etc/unix/run_erl.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/erts/etc/unix/run_erl.c b/erts/etc/unix/run_erl.c
index f05c729ee..f92816370 100644
--- a/erts/etc/unix/run_erl.c
+++ b/erts/etc/unix/run_erl.c
@@ -627,12 +627,14 @@ static void pass_on(pid_t childpid)
status("Pty master read; ");
#endif
if ((len = sf_read(mfd, buf, BUFSIZ)) <= 0) {
+ int saved_errno = errno;
sf_close(rfd);
if(wfd) sf_close(wfd);
sf_close(mfd);
unlink(fifo1);
unlink(fifo2);
if (len < 0) {
+ errno = saved_errno;
if(errno == EIO)
ERROR0(LOG_ERR,"Erlang closed the connection.");
else
@@ -1342,13 +1344,15 @@ static int sf_open(const char *path, int type, mode_t mode) {
return fd;
}
+
static int sf_close(int fd) {
int res = 0;
- do { res = close(fd); } while(fd < 0 && errno == EINTR);
+ do { res = close(fd); } while(res < 0 && errno == EINTR);
return res;
}
+
/* Extract any control sequences that are ment only for run_erl
* and should not be forwarded to the pty.
*/
--
2.14.1