J
johan
Hello,
I have a very strange problem.
I'm using jboss3.2.3 with java 1.4.1_02 on linux redhat 7.3
The webserverapplication uses a jni connection to a own written linux
library.
Everything works very fine except a memory leak.
I have checked my java application on leaks with jprofiler and
everything seams cleaned-up nice.
I also have checked my c-application on mem-leaks and also there we
don't have any leak.
So it must be somwhere in jni interface? Anyone a id how to find this
leak?
I have maked 2 big functions java_2_cpp and cpp_2_java thats transfers
the data between the lib an the java webserver
thx
Johan
//==================== part of code ================//
java_2_cpp(JNIEnv *env,jobject obj)
case dm_astring:{
fid=0x00;
cls = env->GetObjectClass(current_obj);
fid=env->GetFieldID(cls,members.element_name,"Lcom/arrowup/gva/data/AString;");
if(fid==NULL){
break;
}
m_string=env->GetObjectField(current_obj,fid);
fid=0x00;
cls = env->GetObjectClass(m_string);
fid=env->GetFieldID(cls,"value","Ljava/lang/String;");
if(fid==0x00){
break;
}
jstring jstr = (jstring)env->GetObjectField(m_string,fid);
if(jstr!=0x00){
p_str= env->GetStringUTFChars(jstr,0);
*(AString *)members.ptr = p_str;
env->ReleaseStringUTFChars((jstring)jstr,p_str);
}
break;
}
//=====================================================//
cpp_2_java(JNIEnv *env,jobject obj)
case dm_astring:{
fid=0x00;
cls = env->GetObjectClass(current_obj);
fid=env->GetFieldID(cls,members.element_name,"Lcom/arrowup/gva/data/AString;");
if(fid==0x00){
break;
}
m_string=env->GetObjectField(current_obj,fid);
fid=0x00;
cls = env->GetObjectClass(m_string);
fid=env->GetFieldID(cls,"value","Ljava/lang/String;");
if(fid==0x00){
printf("Nothing found 4444 !!!\n");
break;
}
char *p_str=NULL;
p_str=((AString *)members.ptr)->str();
if(p_str!=NULL){
if(strlen(p_str)!=0x00){
jstring jstr = env->NewStringUTF(p_str);
env->SetObjectField(m_string,fid,(jobject)jstr);
}
}
break;
}
I have a very strange problem.
I'm using jboss3.2.3 with java 1.4.1_02 on linux redhat 7.3
The webserverapplication uses a jni connection to a own written linux
library.
Everything works very fine except a memory leak.
I have checked my java application on leaks with jprofiler and
everything seams cleaned-up nice.
I also have checked my c-application on mem-leaks and also there we
don't have any leak.
So it must be somwhere in jni interface? Anyone a id how to find this
leak?
I have maked 2 big functions java_2_cpp and cpp_2_java thats transfers
the data between the lib an the java webserver
thx
Johan
//==================== part of code ================//
java_2_cpp(JNIEnv *env,jobject obj)
case dm_astring:{
fid=0x00;
cls = env->GetObjectClass(current_obj);
fid=env->GetFieldID(cls,members.element_name,"Lcom/arrowup/gva/data/AString;");
if(fid==NULL){
break;
}
m_string=env->GetObjectField(current_obj,fid);
fid=0x00;
cls = env->GetObjectClass(m_string);
fid=env->GetFieldID(cls,"value","Ljava/lang/String;");
if(fid==0x00){
break;
}
jstring jstr = (jstring)env->GetObjectField(m_string,fid);
if(jstr!=0x00){
p_str= env->GetStringUTFChars(jstr,0);
*(AString *)members.ptr = p_str;
env->ReleaseStringUTFChars((jstring)jstr,p_str);
}
break;
}
//=====================================================//
cpp_2_java(JNIEnv *env,jobject obj)
case dm_astring:{
fid=0x00;
cls = env->GetObjectClass(current_obj);
fid=env->GetFieldID(cls,members.element_name,"Lcom/arrowup/gva/data/AString;");
if(fid==0x00){
break;
}
m_string=env->GetObjectField(current_obj,fid);
fid=0x00;
cls = env->GetObjectClass(m_string);
fid=env->GetFieldID(cls,"value","Ljava/lang/String;");
if(fid==0x00){
printf("Nothing found 4444 !!!\n");
break;
}
char *p_str=NULL;
p_str=((AString *)members.ptr)->str();
if(p_str!=NULL){
if(strlen(p_str)!=0x00){
jstring jstr = env->NewStringUTF(p_str);
env->SetObjectField(m_string,fid,(jobject)jstr);
}
}
break;
}