update jni for memory leak detection

This commit is contained in:
localvar 2019-11-14 08:46:53 +00:00
parent dcfbbe8a58
commit a5bfb0d670
3 changed files with 25 additions and 0 deletions

View File

@ -9,6 +9,14 @@ extern "C" {
#endif #endif
#undef com_taosdata_jdbc_TSDBJNIConnector_INVALID_CONNECTION_POINTER_VALUE #undef com_taosdata_jdbc_TSDBJNIConnector_INVALID_CONNECTION_POINTER_VALUE
#define com_taosdata_jdbc_TSDBJNIConnector_INVALID_CONNECTION_POINTER_VALUE 0LL #define com_taosdata_jdbc_TSDBJNIConnector_INVALID_CONNECTION_POINTER_VALUE 0LL
/*
* Class: com_taosdata_jdbc_TSDBJNIConnector
* Method:
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_detectMemoryLeakImp
(JNIEnv *, jclass, jstring);
/* /*
* Class: com_taosdata_jdbc_TSDBJNIConnector * Class: com_taosdata_jdbc_TSDBJNIConnector
* Method: initImp * Method: initImp

View File

@ -111,6 +111,18 @@ void jniGetGlobalMethod(JNIEnv *env) {
jniTrace("native method register finished"); jniTrace("native method register finished");
} }
JNIEXPORT void JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_detectMemoryLeakImp(JNIEnv *env, jobject jobj, jstring jPath) {
if (jPath != NULL) {
const char *path = (*env)->GetStringUTFChars(env, jPath, NULL);
taos_dump_memory_leak_at_exit(path);
(*env)->ReleaseStringUTFChars(env, jPath, path);
} else {
taos_dump_memory_leak_at_exit(NULL);
}
jniGetGlobalMethod(env);
}
JNIEXPORT void JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_initImp(JNIEnv *env, jobject jobj, jstring jconfigDir) { JNIEXPORT void JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_initImp(JNIEnv *env, jobject jobj, jstring jconfigDir) {
if (jconfigDir != NULL) { if (jconfigDir != NULL) {
const char *confDir = (*env)->GetStringUTFChars(env, jconfigDir, NULL); const char *confDir = (*env)->GetStringUTFChars(env, jconfigDir, NULL);

View File

@ -310,6 +310,11 @@ static void dump_memory_leak_at_sig(int sig) {
} }
void taos_dump_memory_leak_at_exit(const char* path) { void taos_dump_memory_leak_at_exit(const char* path) {
if (fpMemLeak != NULL) {
printf("memory leak detection already enabled.\n");
return;
}
if (path == NULL || path[0] == 0) { if (path == NULL || path[0] == 0) {
fpMemLeak = stdout; fpMemLeak = stdout;
} else if ((fpMemLeak = fopen(path, "w")) == NULL) { } else if ((fpMemLeak = fopen(path, "w")) == NULL) {