Add a helper function to find a thread within a transaction stack. Signed-off-by: Riley Andrews <riandrews@xxxxxxxxxxx> --- drivers/android/binder.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index f7f2217..abd5556 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -1634,6 +1634,19 @@ static int binder_tr_validate_stack(struct binder_thread *thread) return BR_OK; } +struct binder_thread *binder_find_used_thread(struct binder_proc *proc, + struct binder_transaction *stack) +{ + struct binder_transaction *tr = stack; + + while (tr) { + if (tr->from && tr->from->proc == proc) + return tr->from; + tr = tr->from_parent; + } + return NULL; +} + static void binder_transaction(struct binder_thread *thread, struct binder_transaction_data *tr, int reply) { @@ -1688,18 +1701,12 @@ static void binder_transaction(struct binder_thread *thread, goto err_invalid_target_handle; } if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) { - struct binder_transaction *tmp; - return_error = binder_tr_validate_stack(thread); if (return_error != BR_OK) goto err_bad_call_stack; - tmp = thread->transaction_stack; - while (tmp) { - if (tmp->from && tmp->from->proc == target_proc) - target_thread = tmp->from; - tmp = tmp->from_parent; - } + target_thread = binder_find_used_thread(target_proc, + thread->transaction_stack); } } if (target_thread) { -- 2.2.0.rc0.207.ga3a616c _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel