mirror of
https://github.com/tmux/tmux.git
synced 2024-12-12 17:38:48 +00:00
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:
parent
28687f2d55
commit
6ee0afb579
3
tmux.h
3
tmux.h
@ -768,8 +768,7 @@ struct window_pane {
|
|||||||
#define PANE_FOCUSPUSH 0x20
|
#define PANE_FOCUSPUSH 0x20
|
||||||
#define PANE_INPUTOFF 0x40
|
#define PANE_INPUTOFF 0x40
|
||||||
#define PANE_CHANGED 0x80
|
#define PANE_CHANGED 0x80
|
||||||
#define PANE_ERROR 0x100
|
#define PANE_EXITED 0x100
|
||||||
#define PANE_EXITED 0x200
|
|
||||||
|
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
|
14
window.c
14
window.c
@ -391,13 +391,17 @@ window_destroy(struct window *w)
|
|||||||
int
|
int
|
||||||
window_pane_destroy_ready(struct window_pane *wp)
|
window_pane_destroy_ready(struct window_pane *wp)
|
||||||
{
|
{
|
||||||
if (wp->pipe_fd != -1 && EVBUFFER_LENGTH(wp->pipe_event->output) != 0)
|
int n;
|
||||||
return (0);
|
|
||||||
|
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)
|
if (~wp->flags & PANE_EXITED)
|
||||||
return (0);
|
return (0);
|
||||||
if (~wp->flags & PANE_ERROR)
|
|
||||||
return (0);
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1014,7 +1018,7 @@ window_pane_error_callback(__unused struct bufferevent *bufev,
|
|||||||
struct window_pane *wp = data;
|
struct window_pane *wp = data;
|
||||||
|
|
||||||
log_debug("%%%u error", wp->id);
|
log_debug("%%%u error", wp->id);
|
||||||
wp->flags |= PANE_ERROR;
|
wp->flags |= PANE_EXITED;
|
||||||
|
|
||||||
if (window_pane_destroy_ready(wp))
|
if (window_pane_destroy_ready(wp))
|
||||||
server_destroy_pane(wp, 1);
|
server_destroy_pane(wp, 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user