[Bluetooth] Disconnect L2CAP connection after last RFCOMM DLC
The RFCOMM specification says that the device closing the last DLC on a particular session is responsible for closing the multiplexer by closing the corresponding L2CAP channel. Signed-off-by: Ville Tervo <ville.tervo@nokia.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
@@ -1058,6 +1058,12 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
|
|||||||
case BT_DISCONN:
|
case BT_DISCONN:
|
||||||
d->state = BT_CLOSED;
|
d->state = BT_CLOSED;
|
||||||
__rfcomm_dlc_close(d, 0);
|
__rfcomm_dlc_close(d, 0);
|
||||||
|
|
||||||
|
if (list_empty(&s->dlcs)) {
|
||||||
|
s->state = BT_DISCONN;
|
||||||
|
rfcomm_send_disc(s, 0);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1067,6 +1073,10 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
|
|||||||
s->state = BT_CONNECTED;
|
s->state = BT_CONNECTED;
|
||||||
rfcomm_process_connect(s);
|
rfcomm_process_connect(s);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BT_DISCONN:
|
||||||
|
rfcomm_session_put(s);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user