8000
Skip to content

[bluetooth_proxy] Fix connection slot race by deferring slot release until GATT close - #10303

Merged
jesserockz merged 1 commit into
devfrom
slot_freed_too_early
Aug 19, 2025
Merged

[bluetooth_proxy] Fix connection slot race by deferring slot release until GATT close#10303
jesserockz merged 1 commit into
devfrom
slot_freed_too_early

Conversation

@bdraco
@bdraco bdraco commented Aug 19, 2025
Copy link
Copy Markdown
Member

What does this implement/fix?

This PR fixes a long standing race condition in the Bluetooth proxy where connection slots were marked as available too early, before the ESP32 controller had fully released the resources. This caused immediate reconnection attempts to fail with HCI error 0x0d (Connection Rejected Due to Limited Resources), leading to rapid connection/disconnection loops.

The issue occurs because ESP_GATTC_DISCONNECT_EVT only indicates disconnection has started, not that it's complete. The ESP32 controller needs additional time to clean up L2CAP channels, release ATT resources, free the HCI connection handle, and update internal connection tracking. By marking the slot as free immediately upon disconnect, ESPHome would try to reuse it before the controller was ready.

The fix ensures connection slots are only marked as free after receiving ESP_GATTC_CLOSE_EVT, which indicates the GATT connection is fully closed and controller resources are freed.

[08:50:59][D][esp32_ble_client:221]: [0] [2B:80:03:ED:CE:5D] ESP_GATTC_WRITE_CHAR_EVT
[08:50:59][D][esp32_ble_client:221]: [0] [2B:80:03:ED:CE:5D] ESP_GATTC_NOTIFY_EVT
[08:51:04][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:04][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:04][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:04][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:04][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:04][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:04][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:04][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:04][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:04][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:04][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:04][D][esp-idf:000][BTU_TASK]: W (40933) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:04][D][esp-idf:000][BTU_TASK]: W (40934) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:04][D][esp-idf:000][BTU_TASK]: W (40934) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:04][D][esp-idf:000][BTU_TASK]: W (40934) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:04][D][esp-idf:000][BTU_TASK]: W (40935) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:04][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:04][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:04][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:04][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:04][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:04][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:04][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:04][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:05][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41443) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41443) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41443) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41444) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41444) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:05][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:05][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:05][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:05][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:05][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:05][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:05][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41645) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:05][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:05][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41690) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41690) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41690) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41691) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:05][D][esp-idf:000][BTU_TASK]: W (41691) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:05][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:05][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:05][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:05][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:05][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:05][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:05][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:05][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:05][D][esp-idf:000][BTU_TASK]: W (42087) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (42088) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (42088) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:05][D][esp-idf:000][BTU_TASK]: W (42088) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:05][D][esp-idf:000][BTU_TASK]: W (42089) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:05][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:05][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:05][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:05][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:05][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:05][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:05][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:05][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:06][D][esp-idf:000][BTU_TASK]: W (42470) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:06][D][esp-idf:000][BTU_TASK]: W (42657) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:06][D][esp-idf:000][BTU_TASK]: W (42837) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:06][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:06][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:06][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:06][D][esp-idf:000][BTU_TASK]: W (43100) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:06][D][esp-idf:000][BTU_TASK]: W (43101) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:06][D][esp-idf:000][BTU_TASK]: W (43101) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:06][D][esp-idf:000][BTU_TASK]: W (43101) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:06][D][esp-idf:000][BTU_TASK]: W (43101) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:06][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:06][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:06][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:06][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:06][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:06][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:06][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:06][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:07][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:07][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:07][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43655) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43656) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43656) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43656) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43657) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:07][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:07][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:07][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:07][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:07][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:07][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:07]D (43792) spi_master: Allocate RX buffer for DMA
[08:51:07][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:07][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:07][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:07][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:07][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43940) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43940) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43940) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43941) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:07][D][esp-idf:000][BTU_TASK]: W (43941) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:07][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:07][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:07][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:07][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:07][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:07][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:07][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:07][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:07][D][esp-idf:000][BTU_TASK]: W (44322) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:07][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:07][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:07][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44360) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44360) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44360) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44361) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44361) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:08][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:08][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:08][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:08][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:08][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:08][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:08][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:08][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:08][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:08][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:08][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44832) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44833) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44833) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44834) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:08][D][esp-idf:000][BTU_TASK]: W (44834) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:08][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:08][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:08][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:08][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:08][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:08][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:08][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:08][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:08][D][esp-idf:000][BTU_TASK]: W (45282) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:09][D][esp-idf:000][BTU_TASK]: W (45417) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:09][D][esp-idf:000][BTU_TASK]: W (45605) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:09][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:09][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:09][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:09][D][esp-idf:000][BTU_TASK]: W (45657) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:09][D][esp-idf:000][BTU_TASK]: W (45658) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:09][D][esp-idf:000][BTU_TASK]: W (45658) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:09][D][esp-idf:000][BTU_TASK]: W (45659) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:09][D][esp-idf:000][BTU_TASK]: W (45659) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:09][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:09][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:09][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:09][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:09][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:09][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:09][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:09][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:09][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:09][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:09][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:09][D][esp-idf:000][BTU_TASK]: W (46250) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:09][D][esp-idf:000][BTU_TASK]: W (46250) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:09][D][esp-idf:000][BTU_TASK]: W (46250) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:09][D][esp-idf:000][BTU_TASK]: W (46251) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:09][D][esp-idf:000][BTU_TASK]: W (46251) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:09][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:09][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:10][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:10][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:10][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:10][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:10][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:10][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:10][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:10][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:10][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:10][D][esp-idf:000][BTU_TASK]: W (46715) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:10][D][esp-idf:000][BTU_TASK]: W (46715) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:10][D][esp-idf:000][BTU_TASK]: W (46716) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:10][D][esp-idf:000][BTU_TASK]: W (46716) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:10][D][esp-idf:000][BTU_TASK]: W (46716) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:10][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:10][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:10][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:10][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:10][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:10][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:10][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:10][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:10][D][esp-idf:000][BTU_TASK]: W (47045) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:10][D][esp-idf:000][BTU_TASK]: W (47255) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:10][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:10][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:10][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:10][D][esp-idf:000][BTU_TASK]: W (47330) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:10][D][esp-idf:000][BTU_TASK]: W (47331) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:10][D][esp-idf:000][BTU_TASK]: W (47331) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:10][D][esp-idf:000][BTU_TASK]: W (47331) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:10][D][esp-idf:000][BTU_TASK]: W (47331) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:11][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:11][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:11][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:11][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:11][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:11][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:11][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:11][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47517) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47518) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47518) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47518) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47519) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:11][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:11][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:11][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:11][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:11][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:11][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:11][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:11][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47915) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47916) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47916) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47916) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:11][D][esp-idf:000][BTU_TASK]: W (47916) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:11][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:11][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:11][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:11][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:11][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:11][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:11][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:11][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:11][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:11][D][esp-idf:000][BTU_TASK]: W (48260) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (48261) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (48261) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:11][D][esp-idf:000][BTU_TASK]: W (48261) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:11][D][esp-idf:000][BTU_TASK]: W (48261) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:12][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:12][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:12][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:12][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:12][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:12][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:12][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:12][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48560) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48561) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48561) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48561) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48561) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:12]D (48652) spi_master: Allocate RX buffer for DMA
[08:51:12][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:12][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:12][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:12][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:12][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:12][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:12][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:12][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48972) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48973) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48973) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48974) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:12][D][esp-idf:000][BTU_TASK]: W (48974) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:12][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:12][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:12][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:12][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:12][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:12][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:12][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:12][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:12][D][esp-idf:000][BTU_TASK]: W (49130) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (49131) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (49131) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:12][D][esp-idf:000][BTU_TASK]: W (49131) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:12][D][esp-idf:000][BTU_TASK]: W (49132) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:12][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:12][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:12][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:12][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:12][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:12][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:12][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:12][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:14][D][esp32_ble_client:221]: [0] [2B:80:03:ED:CE:5D] ESP_GATTC_WRITE_CHAR_EVT
[08:51:14][D][esp32_ble_client:221]: [0] [2B:80:03:ED:CE:5D] ESP_GATTC_NOTIFY_EVT
[08:51:16][D][esp-idf:000][BTU_TASK]: W (52858) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x3e dev_find 1
[08:51:16][D][esp32_ble_client:338]: [1] [60:55:F9:2B:36:C2] ESP_GATTC_DISCONNECT_EVT, reason 0x02
[08:51:16][D][esp32_ble_tracker:139]: connecting: 0, discovered: 0, searching: 0, disconnecting: 0
[08:51:16][D][esp32_ble_tracker:219]: Starting scan, set scanner state to STARTING.
[08:51:16]D (52905) spi_master: Allocate RX buffer for DMA
[08:51:16][D][esp-idf:000][BTU_TASK]: W (52888) BT_APPL: gattc_conn_cb: if=3 st=0 id=259 rsn=0x2
[08:51:16][D][esp-idf:000][BTU_TASK]: W (52888) BT_APPL: gattc_conn_cb: if=4 st=0 id=260 rsn=0x2
[08:51:16][D][esp-idf:000][BTU_TASK]: W (52888) BT_APPL: gattc_conn_cb: if=5 st=0 id=261 rsn=0x2
[08:51:16][D][esp-idf:000][BTU_TASK]: W (52889) BT_HCI: hcif disc complete: hdl 0x2, rsn 0x2 dev_find 1
[08:51:16][D][esp-idf:000][BTU_TASK]: W (52889) BT_HCI: btu_hcif_hdl_command_status,opcode:0x041d,status:0x02
[08:51:16][I][bluetooth_proxy:048]: [1] [60:55:F9:2B:36:C2] Connecting v3 without cache
[08:51:16][D][esp32_ble_tracker:139]: connecting: 0, discovered: 1, searching: 0, disconnecting: 0
[08:51:16][D][esp32_ble_tracker:821]: Stopping scan to make connection
[08:51:16][D][esp32_ble_tracker:829]: Promoting client to connect
[08:51:16][I][esp32_ble_client:110]: [1] [60:55:F9:2B:36:C2] 0x00 Connecting
[08:51:16][D][esp32_ble_client:234]: [1] [60:55:F9:2B:36:C2] fast conn params
[08:51:16][D][esp32_ble_tracker:783]: Scan stop complete, set scanner state to IDLE.
[08:51:16][D][esp32_ble_tracker:139]: connecting: 1, discovered: 0, searching: 0, disconnecting: 0
[08:51:24][I][safe_mode:042]: Boot seems successful; resetting boot loop counter

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Code quality improvements to existing code or addition of tests
  • Other

Related issue or feature (if applicable):

Pull request in esphome-docs with documentation (if applicable):

  • N/A (internal implementation detail)

Test Environment

  • ESP32
  • ESP32 IDF
  • ESP8266
  • RP2040
  • BK72xx
  • RTL87xx
  • nRF52840

Example entry for config.yaml:

# No configuration changes required
# This fix applies to all Bluetooth proxy configurations

esp32_ble_tracker:
  scan_parameters:
    active: false

bluetooth_proxy:
  active: true

Checklist:

  • The code change is tested and works locally.
  • Tests have been added to verify that the new code works (under tests/ folder).

If user exposed functionality or configuration variables are added/changed:

@github-actions
Copy link
Copy Markdown
Contributor

To use the changes from this PR as an external component, add the following to your ESPHome configuration YAML file:

external_components:
  - source: github://pr#10303
    components: [bluetooth_proxy]
    refresh: 1h

(Added by the PR bot)

@codecov-commenter
codecov-commenter commented Aug 19, 2025
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 60.45%. Comparing base (82718e6) to head (0c86241).

Additional details and impacted files
@@           Coverage Diff           @@
##              dev   #10303   +/-   ##
=======================================
  Coverage   60.45%   60.45%           
=======================================
  Files          51       51           
  Lines       10417    10417           
  Branches     1388     1388           
=======================================
  Hits         6298     6298           
  Misses       3760     3760           
  Partials      359      359           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@bdraco bdraco added this to the 2025.8.0b4 milestone Aug 19, 2025
@bdraco
bdraco marked this pull request as ready for review August 19, 2025 14:54
Copilot AI review requested due to automatic review settings August 19, 2025 14:54
@bdraco
bdraco requested a review from jesserockz as a code owner August 19, 2025 14:54
Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR fixes a Bluetooth proxy race condition where connection slots were marked as available too early, before the ESP32 controller had fully released resources. This caused immediate reconnection attempts to fail with HCI error 0x0d, leading to connection/disconnection loops.

  • Defers connection slot release from ESP_GATTC_DISCONNECT_EVT to ESP_GATTC_CLOSE_EVT
  • Adds explicit logging to track disconnect and close events separately
  • Sends disconnection notification immediately but waits to free the slot until controller cleanup is complete

@github-actions
Copy link
Copy Markdown
Contributor

👋 Hi there! I've automatically requested reviews from codeowners based on the files changed in this PR.

@jesserockz - You've been requested to review this PR as codeowner(s) of 1 file(s) that were modified. Thanks for your time! 🙏

@jesserockz
jesserockz merged commit 2aaf951 into dev Aug 19, 2025
40 checks passed
@jesserockz
jesserockz deleted the slot_freed_too_early branch August 19, 2025 19:27
jesserockz pushed a commit that referenced this pull request Aug 19, 2025
@jesserockz jesserockz mentioned this pull request Aug 19, 2025
@jesserockz jesserockz mentioned this pull request Aug 19, 2025
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 21, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

0