src/corebluetooth/internal.rs connect_peripheral (~L1117), disconnect_peripheral (~L1130), and discover_services (~L1497) store the reply future in a single Option slot (connected_future_state, disconnected_future_state, services_discovered_future_state). A second concurrent call overwrites the slot, so the first caller's future is dropped without a reply and its .await hangs forever.
Failure scenario: two tasks call peripheral.connect() concurrently; one of them never returns.
Fix direction: either queue waiters (e.g. Vec/VecDeque and resolve all) or immediately error the superseded future.
src/corebluetooth/internal.rsconnect_peripheral(~L1117),disconnect_peripheral(~L1130), anddiscover_services(~L1497) store the reply future in a singleOptionslot (connected_future_state,disconnected_future_state,services_discovered_future_state). A second concurrent call overwrites the slot, so the first caller's future is dropped without a reply and its.awaithangs forever.Failure scenario: two tasks call
peripheral.connect()concurrently; one of them never returns.Fix direction: either queue waiters (e.g.
Vec/VecDequeand resolve all) or immediately error the superseded future.