Loading libs/binder/IPCThreadState.cpp +12 −3 Original line number Original line Diff line number Diff line Loading @@ -1070,9 +1070,18 @@ status_t IPCThreadState::executeCommand(int32_t cmd) << reinterpret_cast<const size_t*>(tr.data.ptr.offsets) << endl; << reinterpret_cast<const size_t*>(tr.data.ptr.offsets) << endl; } } if (tr.target.ptr) { if (tr.target.ptr) { sp<BBinder> b((BBinder*)tr.cookie); // We only have a weak reference on the target object, so we must first try to const status_t error = b->transact(tr.code, buffer, &reply, tr.flags); // safely acquire a strong reference before doing anything else with it. if (reinterpret_cast<RefBase::weakref_type*>( tr.target.ptr)->attemptIncStrong(this)) { const status_t error = reinterpret_cast<BBinder*>(tr.cookie)->transact(tr.code, buffer, &reply, tr.flags); reinterpret_cast<BBinder*>(tr.cookie)->decStrong(this); if (error < NO_ERROR) reply.setError(error); if (error < NO_ERROR) reply.setError(error); } else { const status_t error = UNKNOWN_TRANSACTION; if (error < NO_ERROR) reply.setError(error); } } else { } else { const status_t error = the_context_object->transact(tr.code, buffer, &reply, tr.flags); const status_t error = the_context_object->transact(tr.code, buffer, &reply, tr.flags); Loading Loading
libs/binder/IPCThreadState.cpp +12 −3 Original line number Original line Diff line number Diff line Loading @@ -1070,9 +1070,18 @@ status_t IPCThreadState::executeCommand(int32_t cmd) << reinterpret_cast<const size_t*>(tr.data.ptr.offsets) << endl; << reinterpret_cast<const size_t*>(tr.data.ptr.offsets) << endl; } } if (tr.target.ptr) { if (tr.target.ptr) { sp<BBinder> b((BBinder*)tr.cookie); // We only have a weak reference on the target object, so we must first try to const status_t error = b->transact(tr.code, buffer, &reply, tr.flags); // safely acquire a strong reference before doing anything else with it. if (reinterpret_cast<RefBase::weakref_type*>( tr.target.ptr)->attemptIncStrong(this)) { const status_t error = reinterpret_cast<BBinder*>(tr.cookie)->transact(tr.code, buffer, &reply, tr.flags); reinterpret_cast<BBinder*>(tr.cookie)->decStrong(this); if (error < NO_ERROR) reply.setError(error); if (error < NO_ERROR) reply.setError(error); } else { const status_t error = UNKNOWN_TRANSACTION; if (error < NO_ERROR) reply.setError(error); } } else { } else { const status_t error = the_context_object->transact(tr.code, buffer, &reply, tr.flags); const status_t error = the_context_object->transact(tr.code, buffer, &reply, tr.flags); Loading