- fixed a bug where the stack was restored incorrectly when the VM was not capable of properly restoring the stack (i.e. when an error occurred)
- fixed re-entrancy bugs when a nested VM call on the same context threw an error --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401373
This commit is contained in:
parent
b24a28d834
commit
eb0a4bda94
@ -257,7 +257,7 @@ int BaseContext::Execute(uint32_t code_addr, cell_t *result)
|
||||
}
|
||||
ctx->pushcount = 0;
|
||||
|
||||
cell_t save_sp = ctx->sp;
|
||||
cell_t save_sp = ctx->sp + (pushcount * sizeof(cell_t));
|
||||
cell_t save_hp = ctx->hp;
|
||||
uint32_t n_idx = ctx->n_idx;
|
||||
|
||||
@ -285,7 +285,7 @@ int BaseContext::Execute(uint32_t code_addr, cell_t *result)
|
||||
#if defined SOURCEMOD_BUILD
|
||||
if (err == SP_ERROR_NONE)
|
||||
{
|
||||
if ((ctx->sp - (cell_t)(pushcount * sizeof(cell_t))) != save_sp)
|
||||
if (ctx->sp != save_sp)
|
||||
{
|
||||
g_DbgReporter.GenerateCodeError(this,
|
||||
code_addr,
|
||||
@ -313,6 +313,9 @@ int BaseContext::Execute(uint32_t code_addr, cell_t *result)
|
||||
}
|
||||
|
||||
ctx->n_idx = n_idx;
|
||||
ctx->n_err = SP_ERROR_NONE;
|
||||
m_MsgCache[0] = '\0';
|
||||
m_CustomMsg = false;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user