Commit 30b24920 authored by Vinayak Kariappa Chettimada's avatar Vinayak Kariappa Chettimada Committed by Anas Nashif
Browse files

Bluetooth: Controller: Fix multiple peripheral connection deadlock



Fix deadlock in multiple peripheral connection in a device
due to redundant double reservation of node rx buffer during
crossover scenario in Data Length Update procedure.

Data Length Update resize state was reset back to response
wait state when peripheral received an acknowledgment to
local initiated Data Length Request PDU after having already
transitioned to resize state.

Implementation is designed to transition to resize state
under both Data Length Response reception and crossover
scenario of Data Length Request reception when procedure is
local initiated.

Signed-off-by: default avatarVinayak Kariappa Chettimada <vich@nordicsemi.no>
parent 41654b0d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -5903,7 +5903,9 @@ static inline void ctrl_tx_ack(struct ll_conn *conn, struct node_tx **tx,
#if defined(CONFIG_BT_CTLR_DATA_LENGTH)
	case PDU_DATA_LLCTRL_TYPE_LENGTH_REQ:
		/* wait for response */
		if (conn->llcp_length.state == LLCP_LENGTH_STATE_REQ_ACK_WAIT) {
			conn->llcp_length.state = LLCP_LENGTH_STATE_RSP_WAIT;
		}
		break;

	case PDU_DATA_LLCTRL_TYPE_LENGTH_RSP: