Loading core/java/android/os/HwBinder.java +5 −2 Original line number Diff line number Diff line Loading @@ -33,11 +33,14 @@ public abstract class HwBinder implements IHwBinder { mNativeContext); } @Override public final native void transact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public abstract void onTransact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public native final void registerService( ArrayList<String> interfaceChain, Loading core/java/android/os/HwRemoteBinder.java +4 −1 Original line number Diff line number Diff line Loading @@ -32,12 +32,15 @@ public class HwRemoteBinder implements IHwBinder { mNativeContext); } @Override public IHwInterface queryLocalInterface(String descriptor) { return null; } @Override public native final void transact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public native boolean linkToDeath(DeathRecipient recipient, long cookie); public native boolean unlinkToDeath(DeathRecipient recipient); Loading core/java/android/os/IHwBinder.java +2 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,8 @@ public interface IHwBinder { public static final int FLAG_ONEWAY = 1; public void transact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public IHwInterface queryLocalInterface(String descriptor); Loading core/jni/android_os_HwBinder.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ static struct { jmethodID get; } gArrayListMethods; static jclass gErrorClass; static struct fields_t { jfieldID contextID; jmethodID onTransactID; Loading Loading @@ -144,6 +146,22 @@ status_t JHwBinder::onTransact( replyObj.get(), flags); if (env->ExceptionCheck()) { jthrowable excep = env->ExceptionOccurred(); env->ExceptionDescribe(); if (env->IsInstanceOf(excep, gErrorClass)) { /* It's an error */ LOG(ERROR) << "Forcefully exiting"; exit(1); } else { env->ExceptionClear(); LOG(ERROR) << "Uncaught exception!"; } env->DeleteLocalRef(excep); } status_t err = OK; if (!replyContext->wasSent()) { Loading Loading @@ -356,6 +374,9 @@ int register_android_os_HwBinder(JNIEnv *env) { gArrayListMethods.size = GetMethodIDOrDie(env, arrayListClass, "size", "()I"); gArrayListMethods.get = GetMethodIDOrDie(env, arrayListClass, "get", "(I)Ljava/lang/Object;"); jclass errorClass = FindClassOrDie(env, "java/lang/Error"); gErrorClass = MakeGlobalRefOrDie(env, errorClass); return RegisterMethodsOrDie(env, CLASS_PATH, gMethods, NELEM(gMethods)); } Loading core/jni/android_os_HwParcel.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ static struct fields_t { } gFields; void signalExceptionForError(JNIEnv *env, status_t err) { void signalExceptionForError(JNIEnv *env, status_t err, bool canThrowRemoteException) { switch (err) { case OK: break; Loading Loading @@ -114,8 +114,13 @@ void signalExceptionForError(JNIEnv *env, status_t err) { default: { std::stringstream ss; ss << "HwBinder Error: (" << err << ")"; jniThrowException( env, "java/lang/RuntimeException", "Unknown error"); env, canThrowRemoteException ? "android/os/RemoteException" : "java/lang/RuntimeException", ss.str().c_str()); break; } Loading Loading
core/java/android/os/HwBinder.java +5 −2 Original line number Diff line number Diff line Loading @@ -33,11 +33,14 @@ public abstract class HwBinder implements IHwBinder { mNativeContext); } @Override public final native void transact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public abstract void onTransact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public native final void registerService( ArrayList<String> interfaceChain, Loading
core/java/android/os/HwRemoteBinder.java +4 −1 Original line number Diff line number Diff line Loading @@ -32,12 +32,15 @@ public class HwRemoteBinder implements IHwBinder { mNativeContext); } @Override public IHwInterface queryLocalInterface(String descriptor) { return null; } @Override public native final void transact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public native boolean linkToDeath(DeathRecipient recipient, long cookie); public native boolean unlinkToDeath(DeathRecipient recipient); Loading
core/java/android/os/IHwBinder.java +2 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,8 @@ public interface IHwBinder { public static final int FLAG_ONEWAY = 1; public void transact( int code, HwParcel request, HwParcel reply, int flags); int code, HwParcel request, HwParcel reply, int flags) throws RemoteException; public IHwInterface queryLocalInterface(String descriptor); Loading
core/jni/android_os_HwBinder.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ static struct { jmethodID get; } gArrayListMethods; static jclass gErrorClass; static struct fields_t { jfieldID contextID; jmethodID onTransactID; Loading Loading @@ -144,6 +146,22 @@ status_t JHwBinder::onTransact( replyObj.get(), flags); if (env->ExceptionCheck()) { jthrowable excep = env->ExceptionOccurred(); env->ExceptionDescribe(); if (env->IsInstanceOf(excep, gErrorClass)) { /* It's an error */ LOG(ERROR) << "Forcefully exiting"; exit(1); } else { env->ExceptionClear(); LOG(ERROR) << "Uncaught exception!"; } env->DeleteLocalRef(excep); } status_t err = OK; if (!replyContext->wasSent()) { Loading Loading @@ -356,6 +374,9 @@ int register_android_os_HwBinder(JNIEnv *env) { gArrayListMethods.size = GetMethodIDOrDie(env, arrayListClass, "size", "()I"); gArrayListMethods.get = GetMethodIDOrDie(env, arrayListClass, "get", "(I)Ljava/lang/Object;"); jclass errorClass = FindClassOrDie(env, "java/lang/Error"); gErrorClass = MakeGlobalRefOrDie(env, errorClass); return RegisterMethodsOrDie(env, CLASS_PATH, gMethods, NELEM(gMethods)); } Loading
core/jni/android_os_HwParcel.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ static struct fields_t { } gFields; void signalExceptionForError(JNIEnv *env, status_t err) { void signalExceptionForError(JNIEnv *env, status_t err, bool canThrowRemoteException) { switch (err) { case OK: break; Loading Loading @@ -114,8 +114,13 @@ void signalExceptionForError(JNIEnv *env, status_t err) { default: { std::stringstream ss; ss << "HwBinder Error: (" << err << ")"; jniThrowException( env, "java/lang/RuntimeException", "Unknown error"); env, canThrowRemoteException ? "android/os/RemoteException" : "java/lang/RuntimeException", ss.str().c_str()); break; } Loading