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

Commit 66b83a4c authored by Martijn Coenen's avatar Martijn Coenen Committed by Greg Kroah-Hartman
Browse files

binder: call poll_wait() unconditionally.



Because we're not guaranteed that subsequent calls
to poll() will have a poll_table_struct parameter
with _qproc set. When _qproc is not set, poll_wait()
is a noop, and we won't be woken up correctly.

Signed-off-by: default avatarMartijn Coenen <maco@android.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 33d930e5
Loading
Loading
Loading
Loading
+1 −10
Original line number Diff line number Diff line
@@ -3662,12 +3662,6 @@ static void binder_stat_br(struct binder_proc *proc,
	}
}

static int binder_has_thread_work(struct binder_thread *thread)
{
	return !binder_worklist_empty(thread->proc, &thread->todo) ||
		thread->looper_need_return;
}

static int binder_put_node_cmd(struct binder_proc *proc,
			       struct binder_thread *thread,
			       void __user **ptrp,
@@ -4297,12 +4291,9 @@ static unsigned int binder_poll(struct file *filp,

	binder_inner_proc_unlock(thread->proc);

	if (binder_has_work(thread, wait_for_proc_work))
		return POLLIN;

	poll_wait(filp, &thread->wait, wait);

	if (binder_has_thread_work(thread))
	if (binder_has_work(thread, wait_for_proc_work))
		return POLLIN;

	return 0;