ustream: only report a write error once via state_change callback
[project/libubox.git] / ustream.c
index 37fbaf7..88f1332 100644 (file)
--- a/ustream.c
+++ b/ustream.c
@@ -37,6 +37,7 @@ static void ustream_init_buf(struct ustream_buf *buf, int len)
 
 static void ustream_add_buf(struct ustream_buf_list *l, struct ustream_buf *buf)
 {
+       l->buffers++;
        if (!l->tail)
                l->head = buf;
        else
@@ -329,8 +330,9 @@ char *ustream_get_read_buf(struct ustream *s, int *buflen)
 
 static void ustream_write_error(struct ustream *s)
 {
+       if (!s->write_error)
+               ustream_state_change(s);
        s->write_error = true;
-       ustream_state_change(s);
 }
 
 bool ustream_write_pending(struct ustream *s)
@@ -379,7 +381,6 @@ 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))
@@ -399,9 +400,6 @@ 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;
 }