summaryrefslogtreecommitdiff
path: root/system/bicon/1e7128710f49ca1c53a892b9db3a364ec038f931.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/bicon/1e7128710f49ca1c53a892b9db3a364ec038f931.patch')
-rw-r--r--system/bicon/1e7128710f49ca1c53a892b9db3a364ec038f931.patch114
1 files changed, 0 insertions, 114 deletions
diff --git a/system/bicon/1e7128710f49ca1c53a892b9db3a364ec038f931.patch b/system/bicon/1e7128710f49ca1c53a892b9db3a364ec038f931.patch
deleted file mode 100644
index 2ea806c5b2..0000000000
--- a/system/bicon/1e7128710f49ca1c53a892b9db3a364ec038f931.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-# From 1e7128710f49ca1c53a892b9db3a364ec038f931 Mon Sep 17 00:00:00 2001
-# From: Behdad Esfahbod <behdad@behdad.org>
-# Date: Tue, 14 Oct 2014 17:36:50 -0700
-# Subject: [PATCH] Properly exit if child exited but didn't die
-#
-# Happens, if for example you have a subprocess running in a shell but
-# exit the shell...
-# ---
- bicon/pty_spawn.c | 29 ++++++++++++++++++++++-------
- 1 file changed, 22 insertions(+), 7 deletions(-)
-
-diff --git a/bicon/pty_spawn.c b/bicon/pty_spawn.c
-index ad1da96..21ab737 100644
---- a/bicon/pty_spawn.c
-+++ b/bicon/pty_spawn.c
-@@ -10,6 +10,7 @@ namely the PSF License Agreement For Python 2.2.3
- */
- #include <stdlib.h>
- #include <stdio.h>
-+#include <string.h>
- #include <unistd.h>
- #include <errno.h>
- #include <pty.h>
-@@ -21,6 +22,8 @@ namely the PSF License Agreement For Python 2.2.3
- #include <signal.h>
- #include "pty_spawn.h"
-
-+static volatile int done;
-+
- static pid_t
- _fork (int *master_fd, int *slave_fd)
- {
-@@ -66,7 +69,7 @@ _xread (
- int ret;
- do {
- ret = read (fd, buf, count);
-- } while (ret == -1 && errno == EINTR);
-+ } while (ret == -1 && errno == EINTR && !done);
- return ret;
- }
-
-@@ -81,7 +84,7 @@ _xwrite (
- {
- do {
- ret = write (fd, buf, count);
-- } while (ret == -1 && errno == EINTR);
-+ } while (ret == -1 && errno == EINTR && !done);
- if (ret == -1)
- {
- fprintf (stderr, "bicon: write() failed.\n");
-@@ -105,7 +108,7 @@ _copy (
- ino_t cwd = -1;
- char _proc_child_cwd[32];
- snprintf (_proc_child_cwd, sizeof (_proc_child_cwd), "/proc/%u/cwd", pid);
-- for (;;)
-+ for (;!done;)
- {
-
- FD_ZERO (&rfds);
-@@ -114,9 +117,9 @@ _copy (
- ret = select (master_fd + 1, &rfds, NULL, NULL, ptimeout);
- if (-1 == ret)
- {
-- if (errno == EINTR)
-+ if (errno == EINTR && !done)
- continue;
-- return -1;
-+ return;
- }
- if (0 == ret)
- {
-@@ -147,14 +150,14 @@ _copy (
- {
- count = _xread (master_read, master_fd, buf, sizeof (buf));
- if (count == -1)
-- return -1;
-+ return;
- _xwrite (1, buf, count);
- }
- if (FD_ISSET (0, &rfds))
- {
- count = _xread (stdin_read, 0, buf, sizeof (buf));
- if (count == -1)
-- return -1;
-+ return;
- _xwrite (master_fd, buf, count);
- }
- /* Set timeout, such that if things are steady, we update cwd
-@@ -180,6 +183,13 @@ resize(int dummy)
- kill(pid, SIGWINCH);
- }
-
-+static void
-+child(int dummy)
-+{
-+ done = 1;
-+ fprintf (stderr, "done\n");
-+}
-+
- int
- bicon_spawn (
- const char *file,
-@@ -206,6 +216,11 @@ bicon_spawn (
- sa.sa_handler = resize;
- if (sigaction(SIGWINCH, &sa, NULL) == -1)
- fprintf (stderr, "bicon: sigaction() failed.\n");
-+ sigemptyset (&sa.sa_mask);
-+ sa.sa_flags = 0;
-+ sa.sa_handler = child;
-+ if (sigaction(SIGCHLD, &sa, NULL) == -1)
-+ fprintf (stderr, "bicon: sigaction() failed.\n");
-
- tcgetattr (1, &ts);
- newts = ts;