|
@@ -82,11 +82,14 @@ static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
|
|
|
static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
|
|
|
{
|
|
|
struct sock *sk = d->owner, *parent;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
if (!sk)
|
|
|
return;
|
|
|
|
|
|
BT_DBG("dlc %p state %ld err %d", d, d->state, err);
|
|
|
|
|
|
+ local_irq_save(flags);
|
|
|
bh_lock_sock(sk);
|
|
|
|
|
|
if (err)
|
|
@@ -108,6 +111,7 @@ static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
|
|
|
}
|
|
|
|
|
|
bh_unlock_sock(sk);
|
|
|
+ local_irq_restore(flags);
|
|
|
|
|
|
if (parent && sock_flag(sk, SOCK_ZAPPED)) {
|
|
|
/* We have to drop DLC lock here, otherwise
|