Lua State Life - PullRequest
       9

Lua State Life

1 голос
/ 09 апреля 2019

Я использую Lua в среде микроконтроллера, и недавно у меня были некоторые сбои, связанные с повреждением данных кучи.

Проблема была обнаружена в следующей последовательности:

  1. Позвоните на lua_pcall(L, 0, 0, 0) без проверки возвращаемого значения.
  2. Вызов другой функции, снова с lua_pcall(L, 0, 0, 0), на этот раз проверка возвращаемого значения.
  3. Шаг 2 завершается неудачно (фактически, шаг 1 не удался, но я его не поймал) и вызывает lua_close(L);
  4. Во время lua_close(L) память освобождается. На этом этапе диспетчер памяти обнаруживает повреждение в куче и происходит сбой прошивки.

Я хотел бы спросить, в каких случаях состояние Lua может быть недействительным? (И, следовательно, никакие другие операции не допускаются).

  • Всегда ли безопасно звонить lua_close()?
  • В случае сбоя lua_pcall() разрешается ли снова использовать lua_pcall(), вызывая другую функцию?
  • В случае сбоя lua_pcall() с «нехваткой памяти», можно ли сделать какие-либо предположения о состоянии памяти? Можно ли тогда вызывать lua_close() или вообще любую другую функцию Lua API?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...