@@ -627,9 +627,13 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
627627 jint jniVersion = JNI_VERSION_1_2 ;
628628 if ((* jvm )-> GetEnv (jvm , (void * * )& env , jniVersion ))
629629 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 );
631633 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 );
633637 if (!jniErrorClass ) return JNI_ERR ;
634638
635639 // Cache Java fields as global references
@@ -730,6 +734,17 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
730734 for (int i = 0 ; i < serialPorts .length ; ++ i )
731735 if (serialPorts .ports [i ]-> handle != INVALID_HANDLE_VALUE )
732736 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+ }
733748}
734749
735750JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_uninitializeLibrary (JNIEnv * env , jclass serialComm )
0 commit comments