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: Martijn Coenen <maco@android.com>
This commit is contained in:
@@ -3761,13 +3761,7 @@ static unsigned int binder_poll(struct file *filp,
|
||||
wait_for_proc_work = binder_available_for_proc_work(thread);
|
||||
binder_proc_unlock(thread->proc, __LINE__);
|
||||
|
||||
if (binder_has_work(thread, wait_for_proc_work))
|
||||
goto ret_pollin;
|
||||
binder_put_thread(thread);
|
||||
poll_wait(filp, &thread->wait, wait);
|
||||
thread = binder_get_thread(proc);
|
||||
if (!thread)
|
||||
return -ENOENT;
|
||||
if (binder_has_work(thread, wait_for_proc_work))
|
||||
goto ret_pollin;
|
||||
binder_put_thread(thread);
|
||||
|
||||
Reference in New Issue
Block a user