|
@@ -699,7 +699,9 @@ exception_restore:
|
|
|
//
|
|
//
|
|
|
{
|
|
{
|
|
|
for(;;)
|
|
for(;;)
|
|
|
- {
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ //if the last instruction was a call then check for release hooks
|
|
|
|
|
+ if(ci->_ip->op == _OP_CALL) _sharedstate->CallDelayedReleaseHooks(this);
|
|
|
const SQInstruction &_i_ = *ci->_ip++;
|
|
const SQInstruction &_i_ = *ci->_ip++;
|
|
|
//dumpstack(_stackbase);
|
|
//dumpstack(_stackbase);
|
|
|
//scprintf("\n[%d] %s %d %d %d %d\n",ci->_ip-ci->_iv->_vals,g_InstrDesc[_i_.op].name,arg0,arg1,arg2,arg3);
|
|
//scprintf("\n[%d] %s %d %d %d %d\n",ci->_ip-ci->_iv->_vals,g_InstrDesc[_i_.op].name,arg0,arg1,arg2,arg3);
|
|
@@ -730,8 +732,7 @@ exception_restore:
|
|
|
SQObjectPtr clo = STK(arg1);
|
|
SQObjectPtr clo = STK(arg1);
|
|
|
switch (type(clo)) {
|
|
switch (type(clo)) {
|
|
|
case OT_CLOSURE:
|
|
case OT_CLOSURE:
|
|
|
- _GUARD(StartCall(_closure(clo), sarg0, arg3, _stackbase+arg2, false));
|
|
|
|
|
- _sharedstate->CallDelayedReleaseHooks(this);
|
|
|
|
|
|
|
+ _GUARD(StartCall(_closure(clo), sarg0, arg3, _stackbase+arg2, false));
|
|
|
continue;
|
|
continue;
|
|
|
case OT_NATIVECLOSURE: {
|
|
case OT_NATIVECLOSURE: {
|
|
|
bool suspend;
|
|
bool suspend;
|