intento de ceder a través de un límite de llamada en C
Un script intentó esperar en un sitio donde esperar no está permitido. Es un fallo de programación, no de configuración.
Haz esto primero
Esto necesita un cambio de código en ese script: el autor o un desarrollador tiene que mover la parte que espera.
Qué significa
El código intentó esperar dentro de un sitio que no se puede pausar. Lua sólo puede suspender sus propios marcos; cuando la cadena de llamadas pasa en ese momento por código nativo (C++), no hay nada que suspender, así que la espera es ilegal.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
Un Wait o un await dentro de un comparador de table.sort
table.sortes nativo. Todo lo que haga el comparador tiene que devolver de inmediato. - 2
Esperar dentro de una función de reemplazo de string.gsub
También es nativo.
- 3
Esperar dentro de un callback de la NUI
Los manejadores de
RegisterNUICallbacktienen que llamar acb()y volver; esperar una consulta dentro de uno se topa con esto en algunas versiones. - 4
Esperar dentro de pcall en un Lua más viejo
Lua 5.4 permite ceder el control a través de pcall, pero los runtimes más viejos y algunos envoltorios nativos no.
- 5
Esperar dentro de un manejador de cambio de state bag
A esos los invoca la capa nativa.
Cómo saber cuál es el tuyo
La traza nombra el marco nativo. Hacele una pregunta más simple a la línea que falla: ¿está dentro de una función que le pasé a otra cosa? Si sí, ahí está la frontera.
Dónde mirar
La función que se pasa como argumento en la línea que falla o encima de ella.
Cómo arreglarlo
Hacé la espera afuera, y mantené el callback síncrono:
-- mal
RegisterNUICallback('buy', function(data, cb)
local rows = MySQL.query.await('SELECT ...') -- frontera
cb(rows)
end)
-- bien
RegisterNUICallback('buy', function(data, cb)
cb({ ok = true }) -- contestá enseguida
CreateThread(function() -- y después hacé el trabajo lento
local rows = MySQL.query.await('SELECT ...')
SendNUIMessage({ action = 'result', rows = rows })
end)
end)¿Sigues atascado en tu propio código?
Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.
bug_reportAbrir el Server FixerPara este tipo de error, el Script Optimizer lee el script y repara el código que hay detrás.