Loading core/jni/android_os_HwBinder.cpp +26 −19 Original line number Diff line number Diff line Loading @@ -127,18 +127,23 @@ status_t JHwBinder::onTransact( uint32_t flags, TransactCallback callback) { JNIEnv *env = AndroidRuntime::getJNIEnv(); bool isOneway = (flags & TF_ONE_WAY) != 0; ScopedLocalRef<jobject> replyObj(env, nullptr); sp<JHwParcel> replyContext = nullptr; ScopedLocalRef<jobject> requestObj(env, JHwParcel::NewObject(env)); JHwParcel::GetNativeContext(env, requestObj.get())->setParcel( const_cast<hardware::Parcel *>(&data), false /* assumeOwnership */); ScopedLocalRef<jobject> replyObj(env, JHwParcel::NewObject(env)); sp<JHwParcel> replyContext = JHwParcel::GetNativeContext(env, replyObj.get()); if (!isOneway) { replyObj.reset(JHwParcel::NewObject(env)); replyContext = JHwParcel::GetNativeContext(env, replyObj.get()); replyContext->setParcel(reply, false /* assumeOwnership */); replyContext->setTransactCallback(callback); } env->CallVoidMethod( mObject, Loading Loading @@ -166,6 +171,7 @@ status_t JHwBinder::onTransact( status_t err = OK; if (!isOneway) { if (!replyContext->wasSent()) { // The implementation never finished the transaction. err = UNKNOWN_ERROR; // XXX special error code instead? Loading @@ -180,11 +186,12 @@ status_t JHwBinder::onTransact( // We cannot permanently pass ownership of "data" and "reply" over to their // Java object wrappers (we don't own them ourselves). JHwParcel::GetNativeContext(env, requestObj.get())->setParcel( replyContext->setParcel( NULL /* parcel */, false /* assumeOwnership */); replyContext->setParcel( } JHwParcel::GetNativeContext(env, requestObj.get())->setParcel( NULL /* parcel */, false /* assumeOwnership */); return err; Loading Loading
core/jni/android_os_HwBinder.cpp +26 −19 Original line number Diff line number Diff line Loading @@ -127,18 +127,23 @@ status_t JHwBinder::onTransact( uint32_t flags, TransactCallback callback) { JNIEnv *env = AndroidRuntime::getJNIEnv(); bool isOneway = (flags & TF_ONE_WAY) != 0; ScopedLocalRef<jobject> replyObj(env, nullptr); sp<JHwParcel> replyContext = nullptr; ScopedLocalRef<jobject> requestObj(env, JHwParcel::NewObject(env)); JHwParcel::GetNativeContext(env, requestObj.get())->setParcel( const_cast<hardware::Parcel *>(&data), false /* assumeOwnership */); ScopedLocalRef<jobject> replyObj(env, JHwParcel::NewObject(env)); sp<JHwParcel> replyContext = JHwParcel::GetNativeContext(env, replyObj.get()); if (!isOneway) { replyObj.reset(JHwParcel::NewObject(env)); replyContext = JHwParcel::GetNativeContext(env, replyObj.get()); replyContext->setParcel(reply, false /* assumeOwnership */); replyContext->setTransactCallback(callback); } env->CallVoidMethod( mObject, Loading Loading @@ -166,6 +171,7 @@ status_t JHwBinder::onTransact( status_t err = OK; if (!isOneway) { if (!replyContext->wasSent()) { // The implementation never finished the transaction. err = UNKNOWN_ERROR; // XXX special error code instead? Loading @@ -180,11 +186,12 @@ status_t JHwBinder::onTransact( // We cannot permanently pass ownership of "data" and "reply" over to their // Java object wrappers (we don't own them ourselves). JHwParcel::GetNativeContext(env, requestObj.get())->setParcel( replyContext->setParcel( NULL /* parcel */, false /* assumeOwnership */); replyContext->setParcel( } JHwParcel::GetNativeContext(env, requestObj.get())->setParcel( NULL /* parcel */, false /* assumeOwnership */); return err; Loading