summaryrefslogtreecommitdiffstats
path: root/window.c
diff options
context:
space:
mode:
authornicm <nicm>2017-07-03 12:38:50 +0000
committernicm <nicm>2017-07-03 12:38:50 +0000
commit6ee0afb579fc09cd36058b993f45eb2577a80e76 (patch)
treefec429120a6a5fa16170ae6283adbd3aa421a9b0 /window.c
parent28687f2d55fb30654a7164bf1445f47b052ea115 (diff)
Change previous to not wait for both process exit and pty close -
instead if there is a pipe-pane active, do not exit until all data is read (including any libevent hasn't seen yet). Fixes problem reported by Theo Buehler and still seems to solve the original issue.
Diffstat (limited to 'window.c')
-rw-r--r--window.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/window.c b/window.c
index 55739c0e..437a49d1 100644
--- a/window.c
+++ b/window.c
@@ -391,13 +391,17 @@ window_destroy(struct window *w)
int
window_pane_destroy_ready(struct window_pane *wp)
{
- if (wp->pipe_fd != -1 && EVBUFFER_LENGTH(wp->pipe_event->output) != 0)
- return (0);
+ int n;
+
+ if (wp->pipe_fd != -1) {
+ if (EVBUFFER_LENGTH(wp->pipe_event->output) != 0)
+ return (0);
+ if (ioctl(wp->fd, FIONREAD, &n) != -1 && n > 0)
+ return (0);
+ }
if (~wp->flags & PANE_EXITED)
return (0);
- if (~wp->flags & PANE_ERROR)
- return (0);
return (1);
}
@@ -1014,7 +1018,7 @@ window_pane_error_callback(__unused struct bufferevent *bufev,
struct window_pane *wp = data;
log_debug("%%%u error", wp->id);
- wp->flags |= PANE_ERROR;
+ wp->flags |= PANE_EXITED;
if (window_pane_destroy_ready(wp))
server_destroy_pane(wp, 1);