From 46eab55b48d7ee0edad957e442f73b3ebf96ff8a Mon Sep 17 00:00:00 2001 From: Peter Hurley Date: Fri, 5 Aug 2011 10:44:21 -0400 Subject: [PATCH] --- yaml --- r: 263528 b: refs/heads/master c: 7176522cdca1f0b78a1434b41761f0334511822a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/bluetooth/cmtp/capi.c | 3 ++- trunk/net/bluetooth/cmtp/cmtp.h | 1 + trunk/net/bluetooth/cmtp/core.c | 5 +++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index f6306407e1ac..a0e6117c1065 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 751c10a56802513a6b057c8cf1552cecc1c9afde +refs/heads/master: 7176522cdca1f0b78a1434b41761f0334511822a diff --git a/trunk/net/bluetooth/cmtp/capi.c b/trunk/net/bluetooth/cmtp/capi.c index 040f67b12978..50f0d135eb8f 100644 --- a/trunk/net/bluetooth/cmtp/capi.c +++ b/trunk/net/bluetooth/cmtp/capi.c @@ -386,7 +386,8 @@ static void cmtp_reset_ctr(struct capi_ctr *ctrl) capi_ctr_down(ctrl); - kthread_stop(session->task); + atomic_inc(&session->terminate); + wake_up_process(session->task); } static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp) diff --git a/trunk/net/bluetooth/cmtp/cmtp.h b/trunk/net/bluetooth/cmtp/cmtp.h index db43b54ac9af..c32638dddbf9 100644 --- a/trunk/net/bluetooth/cmtp/cmtp.h +++ b/trunk/net/bluetooth/cmtp/cmtp.h @@ -81,6 +81,7 @@ struct cmtp_session { char name[BTNAMSIZ]; + atomic_t terminate; struct task_struct *task; wait_queue_head_t wait; diff --git a/trunk/net/bluetooth/cmtp/core.c b/trunk/net/bluetooth/cmtp/core.c index 2eb854ab10f6..42cb2f4c0db1 100644 --- a/trunk/net/bluetooth/cmtp/core.c +++ b/trunk/net/bluetooth/cmtp/core.c @@ -295,7 +295,7 @@ static int cmtp_session(void *arg) while (1) { set_current_state(TASK_INTERRUPTIBLE); - if (kthread_should_stop()) + if (atomic_read(&session->terminate)) break; if (sk->sk_state != BT_CONNECTED) break; @@ -416,7 +416,8 @@ int cmtp_del_connection(struct cmtp_conndel_req *req) skb_queue_purge(&session->transmit); /* Stop session thread */ - kthread_stop(session->task); + atomic_inc(&session->terminate); + wake_up_process(session->task); } else err = -ENOENT;