ubusd: fix tx_queue linked list usage
Use the correct parameters for list_add_tail when enqueueing a message in the tx_queue. Previously, list_add_tail(list, entry) was used instead of list_add_tail(entry, list). Due to this, the list would only contain the latest entry, and previously inserted entries were left dangling. Reset the tx_queue offset after a message from the tx_queue has been sent completely. Signed-off-by: Alexander Van Parys <alexander.vanparys_ext@softathome.com>
This commit is contained in:
parent
a8cf678230
commit
4fc532c8a5
2 changed files with 2 additions and 1 deletions
2
ubusd.c
2
ubusd.c
|
@ -154,7 +154,7 @@ static void ubus_msg_enqueue(struct ubus_client *cl, struct ubus_msg_buf *ub)
|
||||||
INIT_LIST_HEAD(&ubl->list);
|
INIT_LIST_HEAD(&ubl->list);
|
||||||
ubl->msg = ubus_msg_ref(ub);
|
ubl->msg = ubus_msg_ref(ub);
|
||||||
|
|
||||||
list_add_tail(&cl->tx_queue, &ubl->list);
|
list_add_tail(&ubl->list, &cl->tx_queue);
|
||||||
cl->txq_len += ub->len;
|
cl->txq_len += ub->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ static void client_cb(struct uloop_fd *sock, unsigned int events)
|
||||||
if (cl->txq_ofs < ub->len + sizeof(ub->hdr))
|
if (cl->txq_ofs < ub->len + sizeof(ub->hdr))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
cl->txq_ofs = 0;
|
||||||
ubus_msg_list_free(ubl);
|
ubus_msg_list_free(ubl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue