Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9be4e3fb authored by Peter Hurley's avatar Peter Hurley Committed by Gustavo Padovan
Browse files

Bluetooth: Fix lost wakeups waiting for sock state change



Fix race conditions which can cause lost wakeups while waiting
for sock state to change.

Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Signed-off-by: default avatarGustavo F. Padovan <padovan@profusion.mobi>
parent 950e2d51
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -494,9 +494,8 @@ int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
	BT_DBG("sk %p", sk);

	add_wait_queue(sk_sleep(sk), &wait);
	while (sk->sk_state != state) {
	set_current_state(TASK_INTERRUPTIBLE);

	while (sk->sk_state != state) {
		if (!timeo) {
			err = -EINPROGRESS;
			break;
@@ -510,12 +509,13 @@ int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock(sk);
		set_current_state(TASK_INTERRUPTIBLE);

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
	__set_current_state(TASK_RUNNING);
	remove_wait_queue(sk_sleep(sk), &wait);
	return err;
}