diff options
author | Thomas Adam <thomas@xteddy.org> | 2019-12-12 14:33:47 +0000 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2019-12-12 14:33:47 +0000 |
commit | 7922f4ee7bd4c18509c6774971fd007a4c5a10e3 (patch) | |
tree | cccfdd336c64b1b652a4b2333fa2efef0ba5edb3 /window.c | |
parent | 0d99519c3d3522e9281f8e0726e3d71fcf3e57f3 (diff) | |
parent | 5134666702ce972390f39e34bed9b60fe566263a (diff) | |
download | rtmux-7922f4ee7bd4c18509c6774971fd007a4c5a10e3.tar.gz rtmux-7922f4ee7bd4c18509c6774971fd007a4c5a10e3.tar.bz2 rtmux-7922f4ee7bd4c18509c6774971fd007a4c5a10e3.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'window.c')
-rw-r--r-- | window.c | 27 |
1 files changed, 13 insertions, 14 deletions
@@ -1608,31 +1608,28 @@ winlink_shuffle_up(struct session *s, struct winlink *wl) } static void -window_pane_input_callback(struct client *c, int closed, void *data) +window_pane_input_callback(struct client *c, __unused const char *path, + int error, int closed, struct evbuffer *buffer, void *data) { struct window_pane_input_data *cdata = data; struct window_pane *wp; - struct evbuffer *evb = c->stdin_data; - u_char *buf = EVBUFFER_DATA(evb); - size_t len = EVBUFFER_LENGTH(evb); + u_char *buf = EVBUFFER_DATA(buffer); + size_t len = EVBUFFER_LENGTH(buffer); wp = window_pane_find_by_id(cdata->wp); - if (wp == NULL || closed || c->flags & CLIENT_DEAD) { + if (wp == NULL || closed || error != 0 || c->flags & CLIENT_DEAD) { if (wp == NULL) c->flags |= CLIENT_EXIT; - evbuffer_drain(evb, len); - - c->stdin_callback = NULL; - server_client_unref(c); + evbuffer_drain(buffer, len); cmdq_continue(cdata->item); - free(cdata); + server_client_unref(c); + free(cdata); return; } - input_parse_buffer(wp, buf, len); - evbuffer_drain(evb, len); + evbuffer_drain(buffer, len); } int @@ -1651,6 +1648,8 @@ window_pane_start_input(struct window_pane *wp, struct cmdq_item *item, cdata->item = item; cdata->wp = wp->id; - return (server_set_stdin_callback(c, window_pane_input_callback, cdata, - cause)); + c->references++; + file_read(c, "-", window_pane_input_callback, cdata); + + return (0); } |