Skip to content

Commit

Permalink
Bluetooth: cmtp: Fix lost wakeup of session thread
Browse files Browse the repository at this point in the history
Fix race condition which can result in missing the wakeup intended
to stop the session thread.

Signed-off-by: Peter Hurley <[email protected]>
Signed-off-by: Gustavo F. Padovan <[email protected]>
  • Loading branch information
peterhurley authored and Gustavo F. Padovan committed Aug 11, 2011
1 parent 38d5755 commit 3a3f5c7
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions net/bluetooth/cmtp/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,9 +292,11 @@ static int cmtp_session(void *arg)

init_waitqueue_entry(&wait, current);
add_wait_queue(sk_sleep(sk), &wait);
while (!kthread_should_stop()) {
while (1) {
set_current_state(TASK_INTERRUPTIBLE);

if (kthread_should_stop())
break;
if (sk->sk_state != BT_CONNECTED)
break;

Expand All @@ -307,7 +309,7 @@ static int cmtp_session(void *arg)

schedule();
}
set_current_state(TASK_RUNNING);
__set_current_state(TASK_RUNNING);
remove_wait_queue(sk_sleep(sk), &wait);

down_write(&cmtp_session_sem);
Expand Down

0 comments on commit 3a3f5c7

Please sign in to comment.