estouro de pilha
Um script chamou a si mesmo várias e várias vezes até ficar sem espaço. Alguma coisa está entrando em loop sobre si mesma.
Faça isto primeiro
Anote qual resource ele nomeia e pare: ele vai continuar derrubando os outros.
O que significa
Uma função chamou a si mesma, direta ou indiretamente, até o Lua ficar sem pilha de chamadas. O script para ali. Num servidor isso costuma levar o resource inteiro na subida, e por isso aparece como «stack overflow logo depois de subir».
O que causa isso
Ordenado pela frequência com que é a resposta.
- 1
Recursão direta sem caso base
Uma função que sempre chama a si mesma. Rara de propósito, comum por acidente quando duas funções receberam o mesmo nome.
- 2
Um evento que dispara a si mesmo
Um handler de
myres:updateque chamaTriggerEvent('myres:update', ...)dentro de si mesmo. Cada disparo é síncrono, então recorre. - 3
Um __index de metatabela que aponta para si mesmo
setmetatable(t, { __index = t }). Qualquer chave que falte recorre para sempre. - 4
Dois resources disparando um no outro
A dispara o evento de B, e o handler de B dispara o de A. Nenhum dos dois arquivos parece recursivo sozinho.
- 5
Uma tabela profunda serializada com um ciclo
json.encodesobre uma tabela que contém a si mesma.
Como saber qual é o seu
O rastro se repete. Procure o mesmo arquivo e a mesma linha aparecendo de novo e de novo nos quadros: esse par é o laço. Se o rastro está cortado, coloque um print no topo da função suspeita e veja ela disparar sem parar.
Onde olhar
O quadro que se repete no rastro.
Como consertar
Dê um piso à recursão, ou corte o ciclo de eventos:
-- um evento que não pode reentrar em si mesmo
local updating = false
AddEventHandler('myres:update', function(data)
if updating then return end
updating = true
-- trabalho
updating = false
end)Ainda travado no seu próprio código?
Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.
bug_reportAbrir o Server FixerPara esse tipo de erro, o Script Optimizer lê o script e conserta o código por trás disso.
Erros que andam junto com este
- Thread travada ou resource demorando demais
- aviso de engasgo (pico de tempo de quadro)
- não dá para retomar uma corrotina morta
- SCRIPT ERROR em citizen:/scripting/lua/scheduler.lua
- tentativa de indexar um número, booleano ou texto
- tentativa de yield através de um limite de chamada em C
- o índice da tabela é nil
- tentativa de indexar um valor nil