Fix vvp memory leak for VPI call with no calltf.
If a VPI call with real arguments has no calltf function, we still need to pop the arguments off the vthread stack. Similarly, if it has a real result, we need to push a value onto the vthread stack.
This commit is contained in:
parent
9a69fcff7b
commit
10ec58703f
|
|
@ -911,17 +911,16 @@ void vpip_execute_vpi_call(vthread_t thr, vpiHandle ref)
|
||||||
}
|
}
|
||||||
vpi_put_value(ref, &val, 0, vpiNoDelay);
|
vpi_put_value(ref, &val, 0, vpiNoDelay);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (vpip_cur_task->real_stack > 0)
|
||||||
|
vthread_pop_real(thr, vpip_cur_task->real_stack);
|
||||||
|
if (vpip_cur_task->string_stack > 0)
|
||||||
|
vthread_pop_str(thr, vpip_cur_task->string_stack);
|
||||||
|
|
||||||
if (vpip_cur_task->real_stack > 0)
|
/* If the function has a real value, then push the value
|
||||||
vthread_pop_real(thr, vpip_cur_task->real_stack);
|
to the thread stack. */
|
||||||
if (vpip_cur_task->string_stack > 0)
|
if (sysfunc_real*func_real = dynamic_cast<sysfunc_real*>(ref)) {
|
||||||
vthread_pop_str(thr, vpip_cur_task->string_stack);
|
vthread_push_real(thr, func_real->return_value_);
|
||||||
|
|
||||||
/* If the function has a real value, then push the value
|
|
||||||
to the thread stack. */
|
|
||||||
if (sysfunc_real*func_real = dynamic_cast<sysfunc_real*>(ref)) {
|
|
||||||
vthread_push_real(thr, func_real->return_value_);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue