Browse Source

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>
(cherry picked from commit 4fc532c8a55ba8217ad67d7fd47c5eb9a8aba044)
Alexander Van Parys 2 years ago
parent
commit
38c7fdd899
2 changed files with 2 additions and 1 deletions
  1. 1 1
      ubusd.c
  2. 1 0
      ubusd_main.c

+ 1 - 1
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);
 	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;
 }
 

+ 1 - 0
ubusd_main.c

@@ -76,6 +76,7 @@ static void client_cb(struct uloop_fd *sock, unsigned int events)
 		if (cl->txq_ofs < ub->len + sizeof(ub->hdr))
 			break;
 
+		cl->txq_ofs = 0;
 		ubus_msg_list_free(ubl);
 	}