Есть ли способ избежать блокировки при вызове lua_resume? - PullRequest
0 голосов
/ 13 февраля 2019

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

Из C-потока, который имеет основное состояние Lua, каждыйrequest создает сопрограмму Lua, помещает в стек предварительно зарегистрированную функцию Lua и некоторые аргументы и запускает ее с lua_resume.Эта функция сценария Lua выполняет io.popen и вызывает функцию C, которая берет FILE * из io.popen, получает соответствующий fd, устанавливает его в неблокирующее значение, добавляет его в событие чтения q ueue и выполняет lua_yield.Пока все хорошо, C вступает во владение.Когда C перезванивает lua_resume, он блокируется, пока я не закончу читать весь контент из fd, связанного с рассматриваемым FILE *.Есть ли способ, которым я могу избежать этой блокировки?Что если я захочу прочитать только один символ и сразу же вернуться к C, не заботясь об оставшихся выходных данных из io.popen?

Я пробовал это как в LuaJIT 2.1beta3, так и в Lua 5.1, и они ведут себя одинаково.Любая помощь будет принята с благодарностью.

...