Проблема в том, что LuaZip не выполняет итерацию по всем открытым внутренним файлам и не закрывает их перед закрытием открытого zip-файла, в котором они содержатся. Таким образом, система аварийно завершает работу, когда сборщик мусора пытается закрыть внутренние файлы, из-под которых извлечен коврик. Таким образом, простое удаление строки zfile:close()
также исправит этот сбой, поскольку сборщик мусора выпустит userdata
в обратном порядке распределения.
Я бы хотел обсудить возможные решения с Данило, Андре и Томасом перед тем, как отправлять патч, потому что нужно принять некоторые дизайнерские решения. Например, если внутренний файл открыт, когда код клиента закрывает zip-файл, оставляете ли вы zip-файл открытым до тех пор, пока не будут освобождены все внутренние файлы, или не аннулируете открытые ссылки на каждый внутренний файл? Возможно, его следует оставить в покое, а пользователей следует проинструктировать: (а) разрешить сборщику мусора закрывать все внутренние и zip-файлы или (b) явно закрыть все внутренние файлы перед закрытием содержащего zip-файла.