[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:
parent
77f2a45fa1
commit
9cf5b0ea3a
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue