diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-12-30 20:26:40 +0400 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2012-12-30 20:26:40 +0400 |
commit | 300a809a7a6b30595962308c4215ead6ec361053 (patch) | |
tree | 08bbc49459476c45512bae01443f8ba027438afb /ustream.c | |
parent | 84822fd6d529abc35bf8023403d547f8001bf5f3 (diff) |
ustream: fix polling for write buffer availability after buffering writes
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'ustream.c')
-rw-r--r-- | ustream.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -341,7 +341,7 @@ bool ustream_write_pending(struct ustream *s) if (s->write_error) return false; - while (buf) { + while (buf && s->w.data_bytes) { struct ustream_buf *next = buf->next; int maxlen = buf->tail - buf->data; @@ -379,6 +379,7 @@ static int ustream_write_buffered(struct ustream *s, const char *data, int len, struct ustream_buf_list *l = &s->w; struct ustream_buf *buf; int maxlen; + bool has_data = !!s->w.data_bytes; while (len) { if (!ustream_prepare_buf(s, &s->w, len)) @@ -398,6 +399,9 @@ static int ustream_write_buffered(struct ustream *s, const char *data, int len, l->data_bytes += maxlen; } + if (s->poll && !has_data) + s->poll(s); + return wr; } |