The branch, master has been updated
via 4d53fd98a67b20527718013ef52f263bf878481c (commit)
from 938d91d2c37f8837e5e808c9315f551ac7bc4636 (commit)
- Log -----------------------------------------------------------------
commit 4d53fd98a67b20527718013ef52f263bf878481c
Author: Nicholas Marriott <[email protected]>
Commit: Nicholas Marriott <[email protected]>
Synchronize forkpty master and child to avoid hang on AIX with fast exiting
child and output left in the queue, from J Raynor.
---
compat/forkpty-aix.c | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/compat/forkpty-aix.c b/compat/forkpty-aix.c
index db9c2e7..78e5f7e 100644
--- a/compat/forkpty-aix.c
+++ b/compat/forkpty-aix.c
@@ -23,16 +23,20 @@
#include <stdlib.h>
#include <stropts.h>
#include <unistd.h>
+#include <errno.h>
#include "tmux.h"
pid_t
forkpty(int *master, unused char *name, struct termios *tio, struct winsize
*ws)
{
- int slave, fd;
- char *path;
+ int slave, fd, pipe_fd[2];
+ char *path, dummy;
pid_t pid;
+ if (pipe(pipe_fd) == -1)
+ return (-1);
+
if ((*master = open("/dev/ptc", O_RDWR|O_NOCTTY)) == -1)
return (-1);
@@ -47,6 +51,13 @@ forkpty(int *master, unused char *name, struct termios *tio,
struct winsize *ws)
case 0:
close(*master);
+ close(pipe_fd[1]);
+ while (read(pipe_fd[0], &dummy, 1) == -1) {
+ if (errno != EINTR)
+ break;
+ }
+ close(pipe_fd[0]);
+
fd = open(_PATH_TTY, O_RDWR|O_NOCTTY);
if (fd >= 0) {
ioctl(fd, TIOCNOTTY, NULL);
@@ -80,13 +91,20 @@ forkpty(int *master, unused char *name, struct termios
*tio, struct winsize *ws)
dup2(slave, 2);
if (slave > 2)
close(slave);
+
return (0);
}
+ close(pipe_fd[0]);
+ close(pipe_fd[1]);
+
close(slave);
return (pid);
out:
+ close(pipe_fd[0]);
+ close(pipe_fd[1]);
+
if (*master != -1)
close(*master);
if (slave != -1)
-----------------------------------------------------------------------
Summary of changes:
compat/forkpty-aix.c | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
hooks/post-receive
--
tmux
------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs