jmethodID mid = 0;
jmethodID mid_callback = 0;
//
- JORTECallbackContext_t *callback_cont = (JORTECallbackContext_t*)recvCallBackParam;
+ // if the subscriber has been destroyed, return
+ if((*(JORTECallbackContext_t**)recvCallBackParam) == 0)
+ return;
+
+ JORTECallbackContext_t *callback_cont = *((JORTECallbackContext_t**)recvCallBackParam);
#ifdef TEST_STAGE
printf("\n\n:c: --------------- recvCallBack called.. --------------- \n");
SubscriptionType stype;
NtpTime deadline;
NtpTime minSeparation;
- // jorte varialbe
+ // jorte variable
JORTECallbackContext_t *callback_cont;
+ JORTECallbackContext_t **callback_cont_ptr;
+
// standart variables
const char *topic = 0;
const char *typename = 0;
// memory alocation
// don't forget use free() funct.!!
callback_cont = (JORTECallbackContext_t*)malloc(sizeof(JORTECallbackContext_t));
+ callback_cont_ptr = (JORTECallbackContext_t**)malloc(sizeof(JORTECallbackContext_t*));
+ *callback_cont_ptr = callback_cont;
do
{
(*env)->SetLongField(env,
obj,
fid,
- (jlong) callback_cont);
+ (jlong) callback_cont_ptr);
#ifdef TEST_STAGE
printf(":c: ORTESubscriptionCreate() calling..\n");
#endif
&deadline,
&minSeparation,
recvCallBack,
- (void*)callback_cont,
+ (void*)callback_cont_ptr,
(uint32_t) j_multicastIP);
if (s == 0)
{
{
//JavaVM *jvm;
//jint ret;
- JORTECallbackContext_t *ctx = (JORTECallbackContext_t*)h;
+ JORTECallbackContext_t *ctx = *((JORTECallbackContext_t**)h);
+ *((JORTECallbackContext_t**)h) = 0;
if(ctx->obj)
{
#ifdef TEST_STAGE
(*env)->DeleteGlobalRef(env, ctx->obj_buf);
}
//
- free((void*)h);
+ free(ctx);
}
// set flag
flag_ok = 1;