Bluetooth: bnep: Fix deadlock in session deletion
[pandora-kernel.git] / net / bluetooth / bnep / core.c
index 7e8ff3c..d9edfe8 100644 (file)
@@ -487,7 +487,7 @@ static int bnep_session(void *arg)
        while (1) {
                set_current_state(TASK_INTERRUPTIBLE);
 
-               if (kthread_should_stop())
+               if (atomic_read(&s->terminate))
                        break;
                /* RX */
                while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
@@ -642,9 +642,10 @@ int bnep_del_connection(struct bnep_conndel_req *req)
        down_read(&bnep_session_sem);
 
        s = __bnep_get_session(req->dst);
-       if (s)
-               kthread_stop(s->task);
-       else
+       if (s) {
+               atomic_inc(&s->terminate);
+               wake_up_process(s->task);
+       } else
                err = -ENOENT;
 
        up_read(&bnep_session_sem);