• Archie Pusaka's avatar
    Bluetooth: Make sure LE create conn cancel is sent when timeout · 5cd39700
    Archie Pusaka authored
    When sending LE create conn command, we set a timer with a duration of
    HCI_LE_CONN_TIMEOUT before timing out and calling
    create_le_conn_complete. Additionally, when receiving the command
    complete, we also set a timer with the same duration to call
    le_conn_timeout.
    
    Usually the latter will be triggered first, which then sends a LE
    create conn cancel command. However, due to the nature of racing, it
    is possible for the former to be called first, thereby calling the
    chain hci_conn_failed -> hci_conn_del -> cancel_delayed_work, thereby
    preventing LE create conn cancel to be sent. In this situation, the
    controller will be stuck in trying the LE connection.
    
    This patch flushes le_conn_timeout on create_le_conn_complete to make
    sure we always send LE create connection cancel, if necessary.
    Signed-off-by: default avatarArchie Pusaka <apusaka@chromium.org>
    Reviewed-by: default avatarYing Hsu <yinghsu@chromium.org>
    Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
    5cd39700
hci_conn.c 69.4 KB