lxc/0055-terminal-not-close-pipe-when-lxc_poll-exit.patch
lifeng 8966f1fe72 lxc: update lxc to 4.0.1
Signed-off-by: lifeng <lifeng68@huawei.com>
2020-04-23 19:30:12 +08:00

65 lines
2.1 KiB
Diff

From d0e0cc557dba264c4228e29edb178d57b25af2f5 Mon Sep 17 00:00:00 2001
From: LiFeng <lifeng68@huawei.com>
Date: Wed, 22 Apr 2020 20:54:19 +0800
Subject: [PATCH] terminal: not close pipe when lxc_poll exit
Signed-off-by: LiFeng <lifeng68@huawei.com>
---
src/lxc/attach.c | 4 +++-
src/lxc/terminal.c | 5 +++--
src/lxc/tools/lxc_attach.c | 3 +++
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/lxc/attach.c b/src/lxc/attach.c
index 5539fb1..51f5c08 100644
--- a/src/lxc/attach.c
+++ b/src/lxc/attach.c
@@ -1542,7 +1542,9 @@ int lxc_attach(struct lxc_container *container, lxc_attach_exec_t exec_function,
if (ret < 0)
goto on_error;
#ifdef HAVE_ISULAD
- (void)lxc_exec_cmd_mainloop_add(&descr, &exec_command);
+ if (suffix != NULL) {
+ (void)lxc_exec_cmd_mainloop_add(&descr, &exec_command);
+ }
#endif
TRACE("Initialized terminal mainloop");
}
diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index 57def93..0197503 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -760,12 +760,13 @@ int lxc_terminal_io_cb(int fd, uint32_t events, void *data,
}
terminal->pipes[2][0] = -EBADF;
}
- close(fd);
+ /* notes: do not close the master fd due to if we close the fd, the process may
+ * recive SIGHUP and the exit code will be 141 (128 + 13)
+ */
return LXC_MAINLOOP_CLOSE;
} else if (fd == terminal->pipes[0][1]) {
TRACE("closed stdin pipe of container stdin");
terminal->pipes[0][1] = -EBADF;
- close(fd);
return LXC_MAINLOOP_CLOSE;
} else {
ERROR("Handler received unexpected file descriptor");
diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c
index da7a7d2..190f3c8 100644
--- a/src/lxc/tools/lxc_attach.c
+++ b/src/lxc/tools/lxc_attach.c
@@ -417,6 +417,9 @@ static int do_attach_foreground(struct lxc_container *c, lxc_attach_command_t *c
signal = WTERMSIG(ret);
wexit = EXIT_SIGNAL_OFFSET + signal;
}
+
+ ERROR("Execd pid %d exit with %d", pid, wexit);
+
out:
if (c->lxc_conf->errmsg)
*errmsg = safe_strdup(c->lxc_conf->errmsg);
--
1.8.3.1