Memory leak after send_v2trap() method

Cool buddy <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
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
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.