@@ -396,10 +396,13 @@ void Java_tinyb_BluetoothDevice_enablePairedNotifications(JNIEnv *env, jobject o
396396 {
397397 jclass notification = search_class (*jni_env, **callback_ptr);
398398 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
399+ jni_env->DeleteLocalRef (notification);
400+
399401 jclass boolean_cls = search_class (*jni_env, " java/lang/Boolean" );
400402 jmethodID constructor = search_method (*jni_env, boolean_cls, " <init>" , " (Z)V" , false );
401403
402404 jobject result = jni_env->NewObject (boolean_cls, constructor, v ? JNI_TRUE : JNI_FALSE);
405+ jni_env->DeleteLocalRef (boolean_cls);
403406
404407 jni_env->CallVoidMethod (**callback_ptr, method, result);
405408 jni_env->DeleteLocalRef (result);
@@ -487,10 +490,13 @@ void Java_tinyb_BluetoothDevice_enableTrustedNotifications(JNIEnv *env, jobject
487490 {
488491 jclass notification = search_class (*jni_env, **callback_ptr);
489492 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
493+ jni_env->DeleteLocalRef (notification);
494+
490495 jclass boolean_cls = search_class (*jni_env, " java/lang/Boolean" );
491496 jmethodID constructor = search_method (*jni_env, boolean_cls, " <init>" , " (Z)V" , false );
492497
493498 jobject result = jni_env->NewObject (boolean_cls, constructor, v ? JNI_TRUE : JNI_FALSE);
499+ jni_env->DeleteLocalRef (boolean_cls);
494500
495501 jni_env->CallVoidMethod (**callback_ptr, method, result);
496502 jni_env->DeleteLocalRef (result);
@@ -578,10 +584,13 @@ void Java_tinyb_BluetoothDevice_enableBlockedNotifications(JNIEnv *env, jobject
578584 {
579585 jclass notification = search_class (*jni_env, **callback_ptr);
580586 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
587+ jni_env->DeleteLocalRef (notification);
588+
581589 jclass boolean_cls = search_class (*jni_env, " java/lang/Boolean" );
582590 jmethodID constructor = search_method (*jni_env, boolean_cls, " <init>" , " (Z)V" , false );
583591
584592 jobject result = jni_env->NewObject (boolean_cls, constructor, v ? JNI_TRUE : JNI_FALSE);
593+ jni_env->DeleteLocalRef (boolean_cls);
585594
586595 jni_env->CallVoidMethod (**callback_ptr, method, result);
587596 jni_env->DeleteLocalRef (result);
@@ -669,10 +678,13 @@ void Java_tinyb_BluetoothDevice_enableRSSINotifications(JNIEnv *env, jobject obj
669678 {
670679 jclass notification = search_class (*jni_env, **callback_ptr);
671680 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
681+ jni_env->DeleteLocalRef (notification);
682+
672683 jclass short_cls = search_class (*jni_env, " java/lang/Short" );
673684 jmethodID constructor = search_method (*jni_env, short_cls, " <init>" , " (S)V" , false );
674685
675686 jobject result = jni_env->NewObject (short_cls, constructor, (jshort) v);
687+ jni_env->DeleteLocalRef (short_cls);
676688
677689 jni_env->CallVoidMethod (**callback_ptr, method, result);
678690 jni_env->DeleteLocalRef (result);
@@ -740,10 +752,13 @@ void Java_tinyb_BluetoothDevice_enableConnectedNotifications(JNIEnv *env, jobjec
740752 {
741753 jclass notification = search_class (*jni_env, **callback_ptr);
742754 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
755+ jni_env->DeleteLocalRef (notification);
756+
743757 jclass boolean_cls = search_class (*jni_env, " java/lang/Boolean" );
744758 jmethodID constructor = search_method (*jni_env, boolean_cls, " <init>" , " (Z)V" , false );
745759
746760 jobject result = jni_env->NewObject (boolean_cls, constructor, v ? JNI_TRUE : JNI_FALSE);
761+ jni_env->DeleteLocalRef (boolean_cls);
747762
748763 jni_env->CallVoidMethod (**callback_ptr, method, result);
749764 jni_env->DeleteLocalRef (result);
@@ -925,6 +940,7 @@ void Java_tinyb_BluetoothDevice_enableManufacturerDataNotifications(JNIEnv *env,
925940 {
926941 jclass notification = search_class (*jni_env, **callback_ptr);
927942 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
943+ jni_env->DeleteLocalRef (notification);
928944
929945 jclass map_cls = search_class (*jni_env, " java/util/HashMap" );
930946 jmethodID map_ctor = search_method (*jni_env, map_cls, " <init>" ,
@@ -938,7 +954,7 @@ void Java_tinyb_BluetoothDevice_enableManufacturerDataNotifications(JNIEnv *env,
938954 " (S)V" , false );
939955
940956 jobject result = jni_env->NewObject (map_cls, map_ctor, v.size ());
941-
957+ jni_env-> DeleteLocalRef (map_cls);
942958 for (auto it: v) {
943959 jbyteArray arr = jni_env->NewByteArray (it.second .size ());
944960 jni_env->SetByteArrayRegion (arr, 0 , it.second .size (), (const jbyte *)it.second .data ());
@@ -951,6 +967,7 @@ void Java_tinyb_BluetoothDevice_enableManufacturerDataNotifications(JNIEnv *env,
951967
952968 jni_env->CallVoidMethod (**callback_ptr, method, result);
953969 jni_env->DeleteLocalRef (result);
970+ jni_env->DeleteLocalRef (short_cls);
954971
955972 });
956973 } catch (std::bad_alloc &e) {
@@ -1040,6 +1057,7 @@ void Java_tinyb_BluetoothDevice_enableServiceDataNotifications(JNIEnv *env, jobj
10401057 {
10411058 jclass notification = search_class (*jni_env, **callback_ptr);
10421059 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
1060+ jni_env->DeleteLocalRef (notification);
10431061
10441062 jclass map_cls = search_class (*jni_env, " java/util/HashMap" );
10451063 jmethodID map_ctor = search_method (*jni_env, map_cls, " <init>" ,
@@ -1049,6 +1067,7 @@ void Java_tinyb_BluetoothDevice_enableServiceDataNotifications(JNIEnv *env, jobj
10491067 false );
10501068
10511069 jobject result = jni_env->NewObject (map_cls, map_ctor, v.size ());
1070+ jni_env->DeleteLocalRef (map_cls);
10521071
10531072 for (auto it: v) {
10541073 jbyteArray arr = jni_env->NewByteArray (it.second .size ());
@@ -1062,7 +1081,6 @@ void Java_tinyb_BluetoothDevice_enableServiceDataNotifications(JNIEnv *env, jobj
10621081
10631082 jni_env->CallVoidMethod (**callback_ptr, method, result);
10641083 jni_env->DeleteLocalRef (result);
1065-
10661084 });
10671085 } catch (std::bad_alloc &e) {
10681086 raise_java_oom_exception (env, e);
@@ -1148,10 +1166,13 @@ void Java_tinyb_BluetoothDevice_enableServicesResolvedNotifications(JNIEnv *env,
11481166 {
11491167 jclass notification = search_class (*jni_env, **callback_ptr);
11501168 jmethodID method = search_method (*jni_env, notification, " run" , " (Ljava/lang/Object;)V" , false );
1169+ jni_env->DeleteLocalRef (notification);
1170+
11511171 jclass boolean_cls = search_class (*jni_env, " java/lang/Boolean" );
11521172 jmethodID constructor = search_method (*jni_env, boolean_cls, " <init>" , " (Z)V" , false );
11531173
11541174 jobject result = jni_env->NewObject (boolean_cls, constructor, v ? JNI_TRUE : JNI_FALSE);
1175+ jni_env->DeleteLocalRef (boolean_cls);
11551176
11561177 jni_env->CallVoidMethod (**callback_ptr, method, result);
11571178 jni_env->DeleteLocalRef (result);
0 commit comments