@@ -711,27 +711,19 @@ static int send_buf(struct bt_conn *conn, struct net_buf *buf,
711
711
712
712
uint16_t frag_len = MIN (conn_mtu (conn ), len );
713
713
714
- /* If ATT sent callback is delayed until data transmission
715
- * is done by BLE controller, the transmitted buffer may
716
- * have an additional reference. The reference is used to
717
- * extend lifetime of the net buffer until the data
718
- * transmission is confirmed by ACK of the remote.
714
+ /* Check that buf->ref is 1 or 2. It would be 1 if this was
715
+ * the only reference (e.g. buf was removed from the conn
716
+ * tx_queue). It would be 2 if the tx_data_pull kept it on
717
+ * the tx_queue for segmentation.
719
718
*
720
- * send_buf function can be called multiple times, if buffer
721
- * has to be fragmented over HCI. In that case, the callback
722
- * is provided as an argument only for the last transmitted
723
- * fragment. The `buf->ref == 1` (or 2) check is skipped
724
- * because it's impossible to properly validate number of
725
- * references for the sent fragments if buffers may have the
726
- * additional reference.
727
- *
728
- * Otherwise, check that buf->ref is 1 or 2. It would be 1
729
- * if this was the only reference (e.g. buf was removed from
730
- * the conn tx_queue). It would be 2 if the tx_data_pull
731
- * kept it on the tx_queue for segmentation.
719
+ * Allow for an additional buffer reference if callback is
720
+ * provided. This can be used to extend lifetime of the net
721
+ * buffer until the data transmission is confirmed by ACK of
722
+ * the remote.
732
723
*/
733
- __ASSERT_NO_MSG (IS_ENABLED (CONFIG_BT_ATT_SENT_CB_AFTER_TX ) || (buf -> ref == 1 ) ||
734
- (buf -> ref == 2 ));
724
+ if (buf -> ref > 2 + (cb ? 1 : 0 )) {
725
+ __ASSERT_NO_MSG (false);
726
+ }
735
727
736
728
/* The reference is always transferred to the frag, so when
737
729
* the frag is destroyed, the parent reference is decremented.
0 commit comments