diff options
Diffstat (limited to 'net/bluetooth')
-rw-r--r-- | net/bluetooth/rfcomm/core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index 71a72fcb2b54..52e04df323ea 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c | |||
@@ -1058,6 +1058,12 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci) | |||
1058 | case BT_DISCONN: | 1058 | case BT_DISCONN: |
1059 | d->state = BT_CLOSED; | 1059 | d->state = BT_CLOSED; |
1060 | __rfcomm_dlc_close(d, 0); | 1060 | __rfcomm_dlc_close(d, 0); |
1061 | |||
1062 | if (list_empty(&s->dlcs)) { | ||
1063 | s->state = BT_DISCONN; | ||
1064 | rfcomm_send_disc(s, 0); | ||
1065 | } | ||
1066 | |||
1061 | break; | 1067 | break; |
1062 | } | 1068 | } |
1063 | } else { | 1069 | } else { |
@@ -1067,6 +1073,10 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci) | |||
1067 | s->state = BT_CONNECTED; | 1073 | s->state = BT_CONNECTED; |
1068 | rfcomm_process_connect(s); | 1074 | rfcomm_process_connect(s); |
1069 | break; | 1075 | break; |
1076 | |||
1077 | case BT_DISCONN: | ||
1078 | rfcomm_session_put(s); | ||
1079 | break; | ||
1070 | } | 1080 | } |
1071 | } | 1081 | } |
1072 | return 0; | 1082 | return 0; |