Hi All,
I am using JNI, I am calling JNI interface from Java so that I can use
native code . While doing so I am facing a memory leak which after doing
like this Please find the pseudo code .
JNIEXPORT void JNICALL
__nativeSendTrap
(JNIEnv *pEnv,
jclass clazz,
jlong es,
jlong cid,
jint es,
jint en,
jint Sev,
jint eTime,
jstring rP,
jstring fO,
jint ek,
jstring fT,
jbyteArray eP,
jint aP,
jstring sT,
jstring trapOID)
{
/* These are the notification types itself */
oid _EvtTrapCritical_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 3, 1};
size_t _EvtTrapCritical_oid_len = OID_LENGTH(_EvtTrapCritical_oid);
oid _EvtTrapMajor_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 3, 2};
size_t _EvtTrapMajor_oid_len = OID_LENGTH(_EvtTrapMajor_oid);
oid _EvtTrapMinor_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 3, 3};
size_t _EvtTrapMinor_oid_len = OID_LENGTH(_EvtTrapMinor_oid);
oid _EvtTrapWarning_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 3, 4};
size_t _EvtTrapWarning_oid_len = OID_LENGTH(_EvtTrapWarning_oid);
oid _EvtTrapInformation_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 3,
5};
size_t _EvtTrapInformation_oid_len = OID_LENGTH(_EvtTrapInformation_oid);
oid _EvtTrapClear_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 3, 6};
size_t _EvtTrapClear_oid_len = OID_LENGTH(_EvtTrapClear_oid);
oid _EvtTrapUnknown_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 3, 7};
size_t _EvtTrapUnknown_oid_len = OID_LENGTH(_EvtTrapUnknown_oid);
/*
* In the notification, we have to assign our notification OID to the
* snmpTrapOID.0 object. Here is it's definition.
*/
oid objid_snmptrap[] = {1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0};
size_t objid_snmptrap_len = OID_LENGTH(objid_snmptrap);
/*
* here is where we store the variables to be sent in the trap
*/
netsnmp_variable_list *_EvtNotification_vars = NULL;
oid es_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 1};
size_t es_oid_len = OID_LENGTH(es_oid);
oid cid_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 2};
size_t cid_oid_len = OID_LENGTH(cid_oid);
oid es_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 3};
size_t es_oid_len = OID_LENGTH(es_oid);
oid en_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 4};
size_t en_oid_len = OID_LENGTH(en_oid);
oid Sev_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 5};
size_t Sev_oid_len = OID_LENGTH(Sev_oid);
oid eTime_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 6};
size_t eTime_oid_len = OID_LENGTH(eTime_oid);
oid rP_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 7};
size_t rP_oid_len = OID_LENGTH(rP_oid);
oid fO_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 8};
size_t fO_oid_len = OID_LENGTH(fO_oid);
oid ek_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 9};
size_t ek_oid_len = OID_LENGTH(ek_oid);
oid fT_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 10};
size_t fT_oid_len = OID_LENGTH(fT_oid);
oid eP_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 11};
size_t eP_oid_len = OID_LENGTH(eP_oid);
oid aP_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 12};
size_t aP_oid_len = OID_LENGTH(aP_oid);
oid sT_oid[] = {1, 3, 6, 1, 4, 1, 4329, 2, 1, 2, 1, 1, 1, 1, 13};
size_t sT_oid_len = OID_LENGTH(sT_oid);
_Int32 tmpInt32 = 0;
const _Char *nfT = NULL;
const _Char *nfO = NULL;
const _Char *nrP = NULL;
const _Char *nsT = NULL;
const jbyte *byteArr = NULL;
_Char errStr[ 128 ] = { '\0' };
switch((_Int32) Sev) {
case __EVT_SEV_CRITICAL:
snmp_varlist_add_variable(&_EvtNotification_vars, objid_snmptrap,
objid_snmptrap_len,
ASN_OBJECT_ID, (u_char *) _EvtTrapCritical_oid, _EvtTrapCritical_oid_len *
sizeof(oid));
break;
case __EVT_SEV_MAJOR:
snmp_varlist_add_variable(&_EvtNotification_vars, objid_snmptrap,
objid_snmptrap_len,
ASN_OBJECT_ID, (u_char *) _EvtTrapMajor_oid, _EvtTrapMajor_oid_len *
sizeof(oid));
break;
case __EVT_SEV_MINOR:
snmp_varlist_add_variable(&_EvtNotification_vars, objid_snmptrap,
objid_snmptrap_len,
ASN_OBJECT_ID, (u_char *) _EvtTrapMinor_oid, _EvtTrapMinor_oid_len *
sizeof(oid));
break;
case __EVT_SEV_WARNING:
snmp_varlist_add_variable(&_EvtNotification_vars, objid_snmptrap,
objid_snmptrap_len,
ASN_OBJECT_ID, (u_char *) _EvtTrapWarning_oid, _EvtTrapWarning_oid_len *
sizeof(oid));
break;
case __EVT_SEV_INFORMATION:
snmp_varlist_add_variable(&_EvtNotification_vars, objid_snmptrap,
objid_snmptrap_len,
ASN_OBJECT_ID, (u_char *) _EvtTrapInformation_oid,
_EvtTrapInformation_oid_len * sizeof(oid));
break;
case __EVT_SEV_CLEAR:
snmp_varlist_add_variable(&_EvtNotification_vars, objid_snmptrap,
objid_snmptrap_len,
ASN_OBJECT_ID, (u_char *) _EvtTrapClear_oid, _EvtTrapClear_oid_len *
sizeof(oid));
break;
default:
snmp_varlist_add_variable(&_EvtNotification_vars, objid_snmptrap,
objid_snmptrap_len,
ASN_OBJECT_ID, (u_char *) _EvtTrapUnknown_oid, _EvtTrapUnknown_oid_len *
sizeof(oid));
}
tmpInt32 = (_Int32) es;
snmp_varlist_add_variable(&_EvtNotification_vars,
es_oid, es_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32,
sizeof(tmpInt32));
tmpInt32 = (_Int32) cid;
snmp_varlist_add_variable(&_EvtNotification_vars,
cid_oid, cid_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32, sizeof(tmpInt32));
tmpInt32 = (_Int32) es;
snmp_varlist_add_variable(&_EvtNotification_vars,
es_oid, es_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32, sizeof(tmpInt32));
tmpInt32 = (_Int32) en;
snmp_varlist_add_variable(&_EvtNotification_vars,
en_oid, en_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32, sizeof(tmpInt32));
tmpInt32 = (_Int32) Sev;
snmp_varlist_add_variable(&_EvtNotification_vars,
Sev_oid, Sev_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32, sizeof(tmpInt32));
tmpInt32 = (_Int32) eTime;
snmp_varlist_add_variable(&_EvtNotification_vars,
eTime_oid, eTime_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32, sizeof(tmpInt32));
nrP = (*pEnv)->GetStringUTFChars(pEnv, rP, NULL);
if( !nrP ) {
sprintf(errStr, "nativeSendTrap: GetStringUTFChars('EventReportingObject'):
NULL");
goto errorReturn;
}
snmp_varlist_add_variable(&_EvtNotification_vars,
rP_oid, rP_oid_len,
ASN_OCTET_STR, (u_char *) nrP, strlen(nrP));
(*pEnv)->ReleaseStringUTFChars(pEnv, rP, nrP);
nrP = NULL;
nfO = (*pEnv)->GetStringUTFChars(pEnv, fO, NULL);
if( !nfO ) {
sprintf(errStr, "nativeSendTrap: GetStringUTFChars('EventFaultyObject'):
NULL");
goto errorReturn;
}
snmp_varlist_add_variable(&_EvtNotification_vars,
fO_oid, fO_oid_len,
ASN_OCTET_STR, (u_char *) nfO, strlen(nfO));
(*pEnv)->ReleaseStringUTFChars(pEnv, rP, nfO);
nfO = NULL;
tmpInt32 = (_Int32) ek;
snmp_varlist_add_variable(&_EvtNotification_vars,
ek_oid, ek_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32,
sizeof(tmpInt32));
nfT = (*pEnv)->GetStringUTFChars(pEnv, fT, NULL);
if( !nfT ) {
sprintf(errStr, "nativeSendTrap: GetStringUTFChars('EventFormatText'):
NULL");
goto errorReturn;
}
snmp_varlist_add_variable(&_EvtNotification_vars,
fT_oid, fT_oid_len,
ASN_OCTET_STR, (u_char *) nfT, strlen(nfT));
(*pEnv)->ReleaseStringUTFChars(pEnv, fT, nfT);
nfT = NULL;
tmpInt32 = (_Int32) aP;
snmp_varlist_add_variable(&_EvtNotification_vars,
aP_oid, aP_oid_len,
ASN_INTEGER, (u_char *) &tmpInt32,
sizeof(tmpInt32));
byteArr = (*pEnv)->GetByteArrayElements(pEnv, eP, NULL);
if( !byteArr ) {
sprintf(errStr, "nativeSendTrap: GetByteArrayElements('EventParameters'):
NULL");
goto errorReturn;
}
snmp_varlist_add_variable(&_EvtNotification_vars,
eP_oid, eP_oid_len,
ASN_OCTET_STR, (u_char *) byteArr, (*pEnv)->GetArrayLength(pEnv, eP));
(*pEnv)->ReleaseByteArrayElements(pEnv, eP, (jbyte*) byteArr, 0);
byteArr = NULL;
nsT = (*pEnv)->GetStringUTFChars(pEnv, sT, NULL);
if( !nsT ) {
sprintf(errStr, "nativeSendTrap: GetStringUTFChars('EventShortText'):
NULL");
goto errorReturn;
}
snmp_varlist_add_variable(&_EvtNotification_vars,
sT_oid, sT_oid_len,
ASN_OCTET_STR, (u_char *) nsT, strlen(nsT));
(*pEnv)->ReleaseStringUTFChars(pEnv, sT, nsT);
nfT = NULL;
send_v2trap(_EvtNotification_vars);
snmp_free_varbind(_EvtNotification_vars);
return;
errorReturn :
if( eP && byteArr )
(*pEnv)->ReleaseByteArrayElements(pEnv, eP, (jbyte*) byteArr, 0);
if( fT && nfT )
(*pEnv)->ReleaseStringUTFChars(pEnv, fT, nfT);
if( fO && nfO )
(*pEnv)->ReleaseStringUTFChars(pEnv, fO, nfO);
if( rP && nrP )
(*pEnv)->ReleaseStringUTFChars(pEnv, rP, nrP);
if( sT && nsT )
(*pEnv)->ReleaseStringUTFChars(pEnv, sT, nsT);
(*pEnv)->ThrowNew(pEnv, (*pEnv)->FindClass(pEnv, "java/lang/Exception"),
errStr);
snmp_free_varbind(_EvtNotification_vars);
return;
}
I suspect the snmp_free_varbind(_EvtNotification_vars); is not realeasing
the memory please do suggest me something
------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users