projects
/
project
/
libubox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ustream: fix polling for write buffer availability after buffering writes
[project/libubox.git]
/
ustream.c
diff --git
a/ustream.c
b/ustream.c
index
9c14678
..
37fbaf7
100644
(file)
--- a/
ustream.c
+++ b/
ustream.c
@@
-341,7
+341,7
@@
bool ustream_write_pending(struct ustream *s)
if (s->write_error)
return false;
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;
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;
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))
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;
}
l->data_bytes += maxlen;
}
+ if (s->poll && !has_data)
+ s->poll(s);
+
return wr;
}
return wr;
}