Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c32dc4e5 authored by pramod kotreshappa's avatar pramod kotreshappa Committed by Linux Build Service Account
Browse files

Bluetooth: Handle JNI global reference clean up

Handle global reference clean-up in ssrcleanup and cleanup reoutine

Change-Id: I5985a7b6c53950d8a1ec92f228215327801ce6cd
CRs-fixed: 745022
parent c5409061
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -812,7 +812,10 @@ static bool cleanupNative(JNIEnv *env, jobject obj) {
    sBluetoothInterface->cleanup();
    ALOGI("%s: return from cleanup",__FUNCTION__);

    if (sJniAdapterServiceObj) {
        env->DeleteGlobalRef(sJniAdapterServiceObj);
        sJniAdapterServiceObj = NULL;
    }

    if (sJniCallbacksObj) {
        env->DeleteGlobalRef(sJniCallbacksObj);
@@ -821,7 +824,7 @@ static bool cleanupNative(JNIEnv *env, jobject obj) {
    return JNI_TRUE;
}

static bool ssrcleanupNative(JNIEnv *env, jobject obj) {
static bool ssrcleanupNative(JNIEnv *env, jobject obj, jboolean cleanup) {
    ALOGV("%s:",__FUNCTION__);

    jboolean result = JNI_FALSE;
@@ -829,8 +832,17 @@ static bool ssrcleanupNative(JNIEnv *env, jobject obj) {

    sBluetoothInterface->ssrcleanup();
    ALOGI("%s: return from cleanup",__FUNCTION__);

    if (cleanup == JNI_TRUE) {
        ALOGI("%s: SSR Cleanup - DISABLE Timeout   ",__FUNCTION__);
        if (sJniCallbacksObj) {
            env->DeleteGlobalRef(sJniCallbacksObj);
            sJniCallbacksObj = NULL;
        }
        if (sJniAdapterServiceObj) {
            env->DeleteGlobalRef(sJniAdapterServiceObj);
            sJniAdapterServiceObj = NULL;
        }
    }
    return JNI_TRUE;
}

@@ -1323,7 +1335,7 @@ static JNINativeMethod sMethods[] = {
    {"classInitNative", "()V", (void *) classInitNative},
    {"initNative", "()Z", (void *) initNative},
    {"cleanupNative", "()V", (void*) cleanupNative},
    {"ssrcleanupNative", "()V", (void*) ssrcleanupNative},
    {"ssrcleanupNative", "(Z)V", (void*) ssrcleanupNative},
    {"enableNative", "()Z",  (void*) enableNative},
    {"disableNative", "()Z",  (void*) disableNative},
    {"setAdapterPropertyNative", "(I[B)Z", (void*) setAdapterPropertyNative},
+1 −1
Original line number Diff line number Diff line
@@ -2062,7 +2062,7 @@ public class AdapterService extends Service {
    private native static void classInitNative();
    private native boolean initNative();
    private native void cleanupNative();
    /*package*/ native void ssrcleanupNative();
    /*package*/ native void ssrcleanupNative(boolean cleanup);
    /*package*/ native boolean enableNative();
    /*package*/ native boolean disableNative();
    /*package*/ native boolean setAdapterPropertyNative(int type, byte[] val);
+2 −2
Original line number Diff line number Diff line
@@ -330,7 +330,7 @@ final class AdapterState extends StateMachine {
                case ENABLE_TIMEOUT:
                    if (DBG) Log.d(TAG,"CURRENT_STATE=PENDING, MESSAGE = ENABLE_TIMEOUT, isTurningOn=" + isTurningOn + ", isTurningOff=" + isTurningOff);
                    errorLog("Error enabling Bluetooth");
                    adapterService.ssrcleanupNative();
                    adapterService.ssrcleanupNative(false);
                    mPendingCommandState.setTurningOn(false);
                    transitionTo(mOffState);
                    notifyAdapterStateChange(BluetoothAdapter.STATE_OFF);
@@ -346,7 +346,7 @@ final class AdapterState extends StateMachine {
                    if (DBG) Log.d(TAG,"CURRENT_STATE=PENDING, MESSAGE = DISABLE_TIMEOUT, isTurningOn=" + isTurningOn + ", isTurningOff=" + isTurningOff);
                    errorLog("Error disabling Bluetooth");
                    mPendingCommandState.setTurningOff(false);
                    adapterService.ssrcleanupNative();
                    adapterService.ssrcleanupNative(true);
                    transitionTo(mOffState);
                    notifyAdapterStateChange(BluetoothAdapter.STATE_OFF);
                    errorLog("Killing the process to force a restart as part cleanup");