Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-12-30 20:26:40 +0400
committerFelix Fietkau <nbd@openwrt.org>2012-12-30 20:26:40 +0400
commit300a809a7a6b30595962308c4215ead6ec361053 (patch)
tree08bbc49459476c45512bae01443f8ba027438afb /ustream.c
parent84822fd6d529abc35bf8023403d547f8001bf5f3 (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.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ustream.c b/ustream.c
index 9c14678..37fbaf7 100644
--- a/ustream.c
+++ b/ustream.c
@@ -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;
}