Merge "Don't generate and send reply object in oneway calls."

am: 60f11f3d16

Change-Id: I790576158c1d2cae6b746f3b5d0dbecad750629a
This commit is contained in:
Martijn Coenen
2017-02-09 08:42:27 +00:00
committed by android-build-merger

View File

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