Merge "Don't generate and send reply object in oneway calls."
am: 60f11f3d16
Change-Id: I790576158c1d2cae6b746f3b5d0dbecad750629a
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user