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

Commit 92a1b2ea authored by Nitin Shivpure's avatar Nitin Shivpure Committed by Andre Eisenbach
Browse files

Bluetooth: Fix to avoid PAN JNI crash due to ENABLE_TIMEOUT

A case, where BT ON/OFF is running in the loop(stress). In one
of the iteration, BT ON gets failed due to ENABLE_TIMEOUT.
But BTIF for PAN had already been initialized. SSR cleanup is
triggered due to BT on failure. So PAN JNI callback obj gets deleted,
PAN control_state_callback is triggered just after PAN JNI cleanup.
BT gets crashed. Checking for NULL to avoid crash in any unknown
scenario.

Change-Id: Ie95470348f11be6c9eccc1e4ac3869d6789f3f6c
parent 975faa16
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -59,6 +59,10 @@ static bool checkCallbackThread() {
static void control_state_callback(btpan_control_state_t state, int local_role, bt_status_t error,
                const char* ifname) {
    debug("state:%d, local_role:%d, ifname:%s", state, local_role, ifname);
    if (mCallbacksObj == NULL) {
        error("Callbacks Obj is NULL: '%s", __FUNCTION__);
        return;
    }
    CHECK_CALLBACK_ENV
    jstring js_ifname = sCallbackEnv->NewStringUTF(ifname);
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onControlStateChanged, (jint)local_role, (jint)state,
@@ -70,6 +74,10 @@ static void connection_state_callback(btpan_connection_state_t state, bt_status_
                                      int local_role, int remote_role) {
    jbyteArray addr;
    debug("state:%d, local_role:%d, remote_role:%d", state, local_role, remote_role);
    if (mCallbacksObj == NULL) {
        error("Callbacks Obj is NULL: '%s", __FUNCTION__);
        return;
    }
    CHECK_CALLBACK_ENV
    addr = sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t));
    if (!addr) {