Bluetooth: Do not purge queue in Basic Mode
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>
Fri, 18 May 2012 23:22:38 +0000 (20:22 -0300)
committerJohan Hedberg <johan.hedberg@intel.com>
Tue, 5 Jun 2012 03:34:05 +0000 (06:34 +0300)
chan->tx_q is only initialized if we use ERTM or Streaming mode.

Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/l2cap_core.c

index b70dca4472a71460f582296c0a936321d49468cd..ae69da8d01e7968b25b146b8cca7de09552e971c 100644 (file)
@@ -549,9 +549,11 @@ static void l2cap_chan_del(struct l2cap_chan *chan, int err)
        if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state))
                return;
 
-       skb_queue_purge(&chan->tx_q);
+       switch(chan->mode) {
+       case L2CAP_MODE_BASIC:
+               break;
 
-       if (chan->mode == L2CAP_MODE_ERTM) {
+       case L2CAP_MODE_ERTM:
                __clear_retrans_timer(chan);
                __clear_monitor_timer(chan);
                __clear_ack_timer(chan);
@@ -560,7 +562,15 @@ static void l2cap_chan_del(struct l2cap_chan *chan, int err)
 
                l2cap_seq_list_free(&chan->srej_list);
                l2cap_seq_list_free(&chan->retrans_list);
+
+               /* fall through */
+
+       case L2CAP_MODE_STREAMING:
+               skb_queue_purge(&chan->tx_q);
+               break;
        }
+
+       return;
 }
 
 static void l2cap_chan_cleanup_listen(struct sock *parent)