Skip to content

Commit b5d5ffd

Browse files
committed
add call to DeleteGlobalRef for native logging callback object
1 parent 30cab26 commit b5d5ffd

1 file changed

Lines changed: 21 additions & 7 deletions

File tree

native/com_wolfssl_WolfSSL.c

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,12 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_cleanup
555555
(void)jenv;
556556
(void)jcl;
557557

558+
/* release global logging callback object if registered */
559+
if (g_loggingCbIfaceObj != NULL) {
560+
(*jenv)->DeleteGlobalRef(jenv, g_loggingCbIfaceObj);
561+
g_loggingCbIfaceObj = NULL;
562+
}
563+
558564
return wolfSSL_Cleanup();
559565
}
560566

@@ -583,18 +589,26 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_setLoggingCb
583589

584590
(void)jcl;
585591

586-
if (!jenv || !callback) {
592+
if (jenv == NULL) {
587593
return BAD_FUNC_ARG;
588594
}
589595

590-
/* store Java logging callback Interface object */
591-
g_loggingCbIfaceObj = (*jenv)->NewGlobalRef(jenv, callback);
592-
if (!g_loggingCbIfaceObj) {
593-
printf("error storing global logging callback interface\n");
594-
return SSL_FAILURE;
596+
/* release existing logging callback object if registered */
597+
if (g_loggingCbIfaceObj != NULL) {
598+
(*jenv)->DeleteGlobalRef(jenv, g_loggingCbIfaceObj);
599+
g_loggingCbIfaceObj = NULL;
595600
}
596601

597-
ret = wolfSSL_SetLoggingCb(NativeLoggingCallback);
602+
if (callback != NULL) {
603+
/* store Java logging callback Interface object */
604+
g_loggingCbIfaceObj = (*jenv)->NewGlobalRef(jenv, callback);
605+
if (g_loggingCbIfaceObj == NULL) {
606+
printf("error storing global logging callback interface\n");
607+
return SSL_FAILURE;
608+
}
609+
610+
ret = wolfSSL_SetLoggingCb(NativeLoggingCallback);
611+
}
598612

599613
return ret;
600614
}

0 commit comments

Comments
 (0)