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

Reply via email to