|
43 | 43 | #include "WindowsHelperFunctions.h" |
44 | 44 |
|
45 | 45 | // Cached class, method, and field IDs |
46 | | -jclass serialCommClass; |
47 | | -jclass jniErrorClass; |
| 46 | +jclass serialCommClass = NULL; |
| 47 | +jclass jniErrorClass = NULL; |
48 | 48 | jmethodID serialCommConstructor; |
49 | 49 | jfieldID serialPortHandleField; |
50 | 50 | jfieldID comPortField; |
@@ -627,9 +627,13 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) |
627 | 627 | jint jniVersion = JNI_VERSION_1_2; |
628 | 628 | if ((*jvm)->GetEnv(jvm, (void**)&env, jniVersion)) |
629 | 629 | return JNI_ERR; |
630 | | - serialCommClass = (*env)->FindClass(env, "com/fazecast/jSerialComm/SerialPort"); |
| 630 | + jclass localSerialCommClass = (*env)->FindClass(env, "com/fazecast/jSerialComm/SerialPort"); |
| 631 | + if (!localSerialCommClass) return JNI_ERR; |
| 632 | + serialCommClass = (*env)->NewGlobalRef(env, localSerialCommClass); |
631 | 633 | if (!serialCommClass) return JNI_ERR; |
632 | | - jniErrorClass = (*env)->FindClass(env, "java/lang/Exception"); |
| 634 | + jclass localJniErrorClass = (*env)->FindClass(env, "java/lang/Exception"); |
| 635 | + if (!localJniErrorClass) return JNI_ERR; |
| 636 | + jniErrorClass = (*env)->NewGlobalRef(env, localJniErrorClass); |
633 | 637 | if (!jniErrorClass) return JNI_ERR; |
634 | 638 |
|
635 | 639 | // Cache Java fields as global references |
@@ -730,6 +734,17 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved) |
730 | 734 | for (int i = 0; i < serialPorts.length; ++i) |
731 | 735 | if (serialPorts.ports[i]->handle != INVALID_HANDLE_VALUE) |
732 | 736 | Java_com_fazecast_jSerialComm_SerialPort_closePortNative(env, jniErrorClass, (jlong)(intptr_t)serialPorts.ports[i]); |
| 737 | + |
| 738 | + if (serialCommClass) |
| 739 | + { |
| 740 | + (*env)->DeleteGlobalRef(env, serialCommClass); |
| 741 | + serialCommClass = NULL; |
| 742 | + } |
| 743 | + if (jniErrorClass) |
| 744 | + { |
| 745 | + (*env)->DeleteGlobalRef(env, jniErrorClass); |
| 746 | + jniErrorClass = NULL; |
| 747 | + } |
733 | 748 | } |
734 | 749 |
|
735 | 750 | JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_uninitializeLibrary(JNIEnv *env, jclass serialComm) |
|
0 commit comments