diff --git a/daemon/websocket.c b/daemon/websocket.c index 6a37e8fe3..58018ff2a 100644 --- a/daemon/websocket.c +++ b/daemon/websocket.c @@ -228,28 +228,31 @@ static int websocket_dequeue(struct websocket_conn *wc) { struct lws *wsi = wc->wsi; while ((wo = g_queue_pop_head(&wc->output_q))) { // used buffer slot? - if (wo->str) { - // allocate post-buffer - g_string_set_size(wo->str, wo->str->len + LWS_SEND_BUFFER_POST_PADDING); - size_t to_send = wo->str->len - wo->str_done - LWS_SEND_BUFFER_POST_PADDING; - if (to_send) { - if (to_send > 500) - ilogs(http, LOG_DEBUG, "Writing %lu bytes to LWS", (unsigned long) to_send); - else - ilogs(http, LOG_DEBUG, "Writing back to LWS: '%.*s'", - (int) to_send, wo->str->str + wo->str_done); - size_t ret = lws_write(wsi, (unsigned char *) wo->str->str + wo->str_done, - to_send, wo->protocol); - if (ret != to_send) - ilogs(http, LOG_ERR, "Invalid LWS write: %lu != %lu", - (unsigned long) ret, - (unsigned long) to_send); - wo->str_done += ret; - - if (wo->protocol == LWS_WRITE_HTTP) - is_http = 1; - } + if (!wo->str) + goto next; + + // allocate post-buffer + g_string_set_size(wo->str, wo->str->len + LWS_SEND_BUFFER_POST_PADDING); + size_t to_send = wo->str->len - wo->str_done - LWS_SEND_BUFFER_POST_PADDING; + if (to_send) { + if (to_send > 500) + ilogs(http, LOG_DEBUG, "Writing %lu bytes to LWS", (unsigned long) to_send); + else + ilogs(http, LOG_DEBUG, "Writing back to LWS: '%.*s'", + (int) to_send, wo->str->str + wo->str_done); + size_t ret = lws_write(wsi, (unsigned char *) wo->str->str + wo->str_done, + to_send, wo->protocol); + if (ret != to_send) + ilogs(http, LOG_ERR, "Invalid LWS write: %lu != %lu", + (unsigned long) ret, + (unsigned long) to_send); + wo->str_done += ret; + + if (wo->protocol == LWS_WRITE_HTTP) + is_http = 1; } + +next: websocket_output_free(wo); } g_queue_push_tail(&wc->output_q, websocket_output_new());