diff options
Diffstat (limited to 'net/bluetooth/l2cap_core.c')
| -rw-r--r-- | net/bluetooth/l2cap_core.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 79923d8bbe9..9f8b29ef5b6 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -416,13 +416,15 @@ struct l2cap_chan *l2cap_chan_create(void)  	return chan;  } -void l2cap_chan_destroy(struct l2cap_chan *chan) +static void l2cap_chan_destroy(struct l2cap_chan *chan)  { +	BT_DBG("chan %p", chan); +  	write_lock(&chan_list_lock);  	list_del(&chan->global_l);  	write_unlock(&chan_list_lock); -	l2cap_chan_put(chan); +	kfree(chan);  }  void l2cap_chan_hold(struct l2cap_chan *c) @@ -437,7 +439,7 @@ void l2cap_chan_put(struct l2cap_chan *c)  	BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->refcnt));  	if (atomic_dec_and_test(&c->refcnt)) -		kfree(c); +		l2cap_chan_destroy(c);  }  void l2cap_chan_set_defaults(struct l2cap_chan *chan)  |