Merge changes I9ad74037,I50b29ef9
* changes: Avoid interface name copy in HwParcel Avoid allocation on Java Binder fast path
This commit is contained in:
@@ -292,19 +292,11 @@ static void JHwParcel_native_enforceInterface(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const jchar *interfaceName = env->GetStringCritical(interfaceNameObj, NULL);
|
const char *interfaceName = env->GetStringUTFChars(interfaceNameObj, NULL);
|
||||||
if (interfaceName) {
|
if (interfaceName) {
|
||||||
String8 interfaceNameCopy = String8(String16(
|
|
||||||
reinterpret_cast<const char16_t *>(interfaceName),
|
|
||||||
env->GetStringLength(interfaceNameObj)));
|
|
||||||
|
|
||||||
env->ReleaseStringCritical(interfaceNameObj, interfaceName);
|
|
||||||
interfaceName = NULL;
|
|
||||||
|
|
||||||
hardware::Parcel *parcel =
|
hardware::Parcel *parcel =
|
||||||
JHwParcel::GetNativeContext(env, thiz)->getParcel();
|
JHwParcel::GetNativeContext(env, thiz)->getParcel();
|
||||||
|
bool valid = parcel->enforceInterface(interfaceName);
|
||||||
bool valid = parcel->enforceInterface(interfaceNameCopy.string());
|
|
||||||
|
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
jniThrowException(
|
jniThrowException(
|
||||||
@@ -312,6 +304,7 @@ static void JHwParcel_native_enforceInterface(
|
|||||||
"java/lang/SecurityException",
|
"java/lang/SecurityException",
|
||||||
"HWBinder invocation to an incorrect interface");
|
"HWBinder invocation to an incorrect interface");
|
||||||
}
|
}
|
||||||
|
env->ReleaseStringUTFChars(interfaceNameObj, interfaceName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -625,8 +625,8 @@ static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jlong
|
|||||||
IPCThreadState* threadState = IPCThreadState::self();
|
IPCThreadState* threadState = IPCThreadState::self();
|
||||||
const int32_t oldPolicy = threadState->getStrictModePolicy();
|
const int32_t oldPolicy = threadState->getStrictModePolicy();
|
||||||
const bool isValid = parcel->enforceInterface(
|
const bool isValid = parcel->enforceInterface(
|
||||||
String16(reinterpret_cast<const char16_t*>(str),
|
reinterpret_cast<const char16_t*>(str),
|
||||||
env->GetStringLength(name)),
|
env->GetStringLength(name),
|
||||||
threadState);
|
threadState);
|
||||||
env->ReleaseStringCritical(name, str);
|
env->ReleaseStringCritical(name, str);
|
||||||
if (isValid) {
|
if (isValid) {
|
||||||
|
|||||||
Reference in New Issue
Block a user