Mercurial > vim
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; |