Skip to content

Commit 8af7180

Browse files
jori-nordicaescolar
authored andcommitted
Bluetooth: iso: make TX path service all connections
ISO connections that were in the TX queue were not getting serviced in time. This happens because `iso_data_pull()` returns `NULL` when that particular connection (`conn`) is done sending. But it doesn't trigger the TX processor again to process other channels in the queue. This patch fixes that by calling `bt_tx_irq_raise()`. We can't do this from `conn.c` as we don't know if the `NULL` returned is because the current channel is out of data or because it has data but it can't send it (e.g. the current buf is being "viewed" already). Fixes #74321 Signed-off-by: Jonathan Rico <[email protected]>
1 parent 97a97c7 commit 8af7180

File tree

1 file changed

+6
-0
lines changed
  • subsys/bluetooth/host

1 file changed

+6
-0
lines changed

subsys/bluetooth/host/iso.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,9 @@ static struct net_buf *iso_data_pull(struct bt_conn *conn,
750750

751751
if (!frag) {
752752
LOG_DBG("signaled ready but no frag available");
753+
/* Service other connections */
754+
bt_tx_irq_raise();
755+
753756
return NULL;
754757
}
755758

@@ -759,6 +762,9 @@ static struct net_buf *iso_data_pull(struct bt_conn *conn,
759762
LOG_DBG("channel has been disconnected");
760763
__ASSERT_NO_MSG(b == frag);
761764

765+
/* Service other connections */
766+
bt_tx_irq_raise();
767+
762768
return NULL;
763769
}
764770

0 commit comments

Comments
 (0)