=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window.c,v retrieving revision 1.282 retrieving revision 1.283 diff -u -r1.282 -r1.283 --- src/usr.bin/tmux/window.c 2022/08/24 07:22:30 1.282 +++ src/usr.bin/tmux/window.c 2023/01/06 07:09:27 1.283 @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.282 2022/08/24 07:22:30 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.283 2023/01/06 07:09:27 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -66,6 +66,7 @@ struct window_pane_input_data { struct cmdq_item *item; u_int wp; + struct client_file *file; }; static struct window_pane *window_pane_create(struct window *, u_int, u_int, @@ -1533,18 +1534,16 @@ size_t len = EVBUFFER_LENGTH(buffer); wp = window_pane_find_by_id(cdata->wp); - if (wp == NULL || closed || error != 0 || (c->flags & CLIENT_DEAD)) { + if (cdata->file != NULL && (wp == NULL || c->flags & CLIENT_DEAD)) { if (wp == NULL) c->flags |= CLIENT_EXIT; - - evbuffer_drain(buffer, len); + file_cancel(cdata->file); + } else if (cdata->file == NULL || closed || error != 0) { cmdq_continue(cdata->item); - server_client_unref(c); free(cdata); - return; - } - input_parse_buffer(wp, buf, len); + } else + input_parse_buffer(wp, buf, len); evbuffer_drain(buffer, len); } @@ -1567,9 +1566,8 @@ cdata = xmalloc(sizeof *cdata); cdata->item = item; cdata->wp = wp->id; - + cdata->file = file_read(c, "-", window_pane_input_callback, cdata); c->references++; - file_read(c, "-", window_pane_input_callback, cdata); return (0); }