• Johan Hedberg's avatar
    Bluetooth: Simplify hci_conn_hold/drop logic for L2CAP · 5ee9891d
    Johan Hedberg authored
    The L2CAP code has been incrementing the hci_conn reference for each
    l2cap_chan instance in the l2cap_conn list. Likewise, the reference is
    dropped each time an l2cap_chan is removed from the list. The reference
    counting policy with respect to removal has been clear and explicit in
    the l2cap_chan_del function, however for addition the function
    calling 2cap_chan_add has always had to do a separate hci_conn_hold
    call.
    
    What made the counting even more hard to follow is that the
    hci_connect() procedure increments the reference and the L2CAP layer
    making this call took advantage of it to use it as its own reference.
    
    This patch aims to clarify things by having the call to hci_conn_hold
    inside __l2cap_chan_add, thereby removing the need to do it in the
    functions calling __l2cap_chan_add. The reference count for hci_connect
    is still kept as it's necessary for users such as mgmt_pair_device,
    however for the L2CAP layer it means that an extra call to hci_conn_drop
    must be performed once l2cap_chan_add has been done.
    Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
    Acked-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
    5ee9891d
l2cap_core.c 158 KB