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.
This commit is contained in:
nicm
2017-07-03 12:38:50 +00:00
parent 28687f2d55
commit 6ee0afb579
2 changed files with 10 additions and 7 deletions

View File

@ -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);