comparison src/channel.c @ 12168:51e5a8602624 v8.0.0964

patch 8.0.0964: channel write buffer does not work with poll() commit https://github.com/vim/vim/commit/683b7967253ecd44476a5a01d857271c0d3ff4f4 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 19 15:51:59 2017 +0200 patch 8.0.0964: channel write buffer does not work with poll() Problem: Channel write buffer does not work with poll(). Solution: Use the same mechanism as with select().
author Christian Brabandt <cb@256bit.org>
date Sat, 19 Aug 2017 16:00:04 +0200
parents b3e39486880a
children a1014f647b61
comparison
equal deleted inserted replaced
12167:917ae89c1f9d 12168:51e5a8602624
3016 3016
3017 for (ch = first_channel; ch != NULL; ch = ch->ch_next) 3017 for (ch = first_channel; ch != NULL; ch = ch->ch_next)
3018 { 3018 {
3019 chanpart_T *in_part = &ch->ch_part[PART_IN]; 3019 chanpart_T *in_part = &ch->ch_part[PART_IN];
3020 3020
3021 if (in_part->ch_fd != INVALID_FD && in_part->ch_bufref.br_buf != NULL) 3021 if (in_part->ch_fd != INVALID_FD
3022 && (in_part->ch_bufref.br_buf != NULL
3023 || in_part->ch_writeque.wq_next != NULL))
3022 { 3024 {
3023 in_part->ch_poll_idx = nfd; 3025 in_part->ch_poll_idx = nfd;
3024 fds[nfd].fd = in_part->ch_fd; 3026 fds[nfd].fd = in_part->ch_fd;
3025 fds[nfd].events = POLLOUT; 3027 fds[nfd].events = POLLOUT;
3026 ++nfd; 3028 ++nfd;
3944 3946
3945 in_part = &channel->ch_part[PART_IN]; 3947 in_part = &channel->ch_part[PART_IN];
3946 idx = in_part->ch_poll_idx; 3948 idx = in_part->ch_poll_idx;
3947 if (ret > 0 && idx != -1 && (fds[idx].revents & POLLOUT)) 3949 if (ret > 0 && idx != -1 && (fds[idx].revents & POLLOUT))
3948 { 3950 {
3949 if (in_part->ch_buf_append) 3951 channel_write_input(channel);
3950 {
3951 if (in_part->ch_bufref.br_buf != NULL)
3952 channel_write_new_lines(in_part->ch_bufref.br_buf);
3953 }
3954 else
3955 channel_write_in(channel);
3956 --ret; 3952 --ret;
3957 } 3953 }
3958 } 3954 }
3959 3955
3960 return ret; 3956 return ret;