Lua: избегайте перегрузки pcall и колл-стека Lua

У меня есть программа, которая выполняет очень быстрые вызовы сценария Lua, используя lua_pcall, Похоже, что если программа слишком быстро вызывает скрипт lua, все испортится и приведет к нарушениям доступа в самых случайных местах.

Я пробовал мьютексы и даже включил исключения SEH с помощью try / catch, но безрезультатно. Функции ошибок на месте, и я проверяю все подходящие коды возврата; проблема заключается в фактическом нарушении прав доступа глубоко внутри компьютера, а не в ошибке Lua

Много времени перерыв происходит в luaV_execute, но иногда это в других случайных местах. Я проверил, чтобы убедиться, что все параметры, помещенные в стек, действительны.

Есть ли способ заставить Lua завершить вызов перед возвратом или какой-то способ гарантировать, что стек вызовов не будет поврежден?

2

Решение

Хотя система Lua в целом является полностью повторяющейся, индивидуальная lua_State сами по себе экземпляры не являются поточно-безопасными

Если вы получаете доступ к lua_State из нескольких потоков вы должны использовать мьютекс или другой механизм блокировки, чтобы гарантировать, что только один поток одновременно может манипулировать этим состоянием. Одновременный доступ может легко привести к коррупции, которую вы видите.

Если вы работаете с несколькими lua_State экземпляры, каждое состояние может иметь свою собственную блокировку доступа; вам не нужна ни одна глобальная блокировка для всего времени выполнения Lua.

5

Другие решения

Других решений пока нет …