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

Commit a5719471 authored by Martijn Coenen's avatar Martijn Coenen
Browse files

ANDROID: 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.

Bug: 64552728
Change-Id: I5b904c9886b6b0994d1631a636f5c5e5f6327950
Test: binderLibTest stops hanging with new test
Signed-off-by: default avatarMartijn Coenen <maco@android.com>
parent b58ccec6
Loading
Loading
Loading
Loading
+1 −10
Original line number Diff line number Diff line
@@ -3798,12 +3798,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,
@@ -4434,12 +4428,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;