Перейти к содержимому
  • 0
Anon

Корутина пытается открыть несуществующий файл

Вопрос

Я готовлю большой проект - виртуальную машину OpenComputers для OpenOS, и уже достиг некоторых успехов. Но появилась серьёзная проблема:

Запустив MineOS своей виртуальной машиной и открыв там приложение palette, после пика любого цвета возникает ошибка

image.thumb.png.20731e6b3701156e33c4ec38ab1e9dc9.png

 

Заранее извиняюсь за скриншот ошибки, но отлов и сохранение её в текстовом виде занял бы много времени.

Ошибка возникает когда что-то пытается открыть файл /home/VirtualMachine1/mineos/lib/process.lua

В том месте, где это происходит, - в функции filesystem.lines апи MineOS, я дампнул стек вызовов. Вот он:

stack traceback:
	/Libraries/Filesystem.lua:572: in field 'lines'
	/Libraries/System.lua:2174: in field 'error'
	/OS.lua:231: in main chunk
	[C]: in function 'xpcall'
	machine:799: in global 'xpcall'
	virtual_bios:179: in upvalue 'executeString'
	virtual_bios:219: in upvalue 'boot'
	virtual_bios:473: in local 'tryBootFromAny'
	virtual_bios:485: in main chunk
	[C]: in function 'xpcall'
	machine:799: in global 'xpcall'
	/usr/lib/libvm.lua:110: in method 'start'
	/usr/bin/vm.lua:40: in main chunk
	(...tail calls...)
	[C]: in function 'xpcall'
	machine:799: in global 'xpcall'
	/lib/process.lua:63: in function </lib/process.lua:59> 

Из него становится ясно, что инициатором сего действия является библиотека OpenOS - /lib/process.lua.

Тут надо немного объяснить, как вообще работает файловая система в моей виртуальной машине:

Фактически, она полностью имитирует компонент файловой системы, но ограничивает её до конкретной директории. Простыми словами, open ("/test.txt") превращается в open ("/home/VirtualMachine1/mineos/test.txt"). То же самое происходит и здесь: система пытается открыть файл "/lib/process.lua", который действительно существует, но виртуальный компонент превращает его в "/home/VirtualMachine1/mineos/lib/process.lua". 

Кажется, всё и так понятно. Но с чего майноси вообще открывать системный файл OpenOS? 

Тут в дело вступает трейсбек, который говорит, что нечто происходит в 63 строке модуля process. Вот ссылка на эту самую строку в гитхабе.

Здесь используется coroutine.create, которая, видимо, исполняет переданную ей функцию при пике цвета в палитре MineOS. Это всё, что мне удалось выяснить, и я понятия не имею, что с этим делать. Корутины и как они работают я знаю меньше всего из lua и opencomputers, так что буду очень рад помощи.

Изменено пользователем Anon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Проблема решена. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
32 минуты назад, Anon сказал:

Я готовлю большой проект - виртуальную машину OpenComputers для OpenOS, и уже достиг некоторых успехов. Но появилась серьёзная проблема:

Запустив MineOS своей виртуальной машиной и открыв там приложение palette, после пика любого цвета возникает ошибка

image.thumb.png.20731e6b3701156e33c4ec38ab1e9dc9.png

 

Заранее извиняюсь за скриншот ошибки, но отлов и сохранение её в текстовом виде занял бы много времени.

Ошибка возникает когда что-то пытается открыть файл /home/VirtualMachine1/mineos/lib/process.lua

В том месте, где это происходит, - в функции filesystem.lines апи MineOS, я дампнул стек вызовов. Вот он:


stack traceback:
	/Libraries/Filesystem.lua:572: in field 'lines'
	/Libraries/System.lua:2174: in field 'error'
	/OS.lua:231: in main chunk
	[C]: in function 'xpcall'
	machine:799: in global 'xpcall'
	virtual_bios:179: in upvalue 'executeString'
	virtual_bios:219: in upvalue 'boot'
	virtual_bios:473: in local 'tryBootFromAny'
	virtual_bios:485: in main chunk
	[C]: in function 'xpcall'
	machine:799: in global 'xpcall'
	/usr/lib/libvm.lua:110: in method 'start'
	/usr/bin/vm.lua:40: in main chunk
	(...tail calls...)
	[C]: in function 'xpcall'
	machine:799: in global 'xpcall'
	/lib/process.lua:63: in function </lib/process.lua:59> 

Из него становится ясно, что инициатором сего действия является библиотека OpenOS - /lib/process.lua.

Тут надо немного объяснить, как вообще работает файловая система в моей виртуальной машине:

Фактически, она полностью имитирует компонент файловой системы, но ограничивает её до конкретной директории. Простыми словами, open ("/test.txt") превращается в open ("/home/VirtualMachine1/mineos/test.txt"). То же самое происходит и здесь: система пытается открыть файл "/lib/process.lua", который действительно существует, но виртуальный компонент превращает его в "/home/VirtualMachine1/mineos/lib/process.lua". 

Кажется, всё и так понятно. Но с чего майноси вообще открывать системный файл OpenOS? 

Тут в дело вступает трейсбек, который говорит, что нечто происходит в 63 строке модуля process. Вот ссылка на эту самую строку в гитхабе.

Здесь используется coroutine.create, которая, видимо, исполняет переданную ей функцию при пике цвета в палитре MineOS. Это всё, что мне удалось выяснить, и я понятия не имею, что с этим делать. Корутины и как они работают я знаю меньше всего из lua и opencomputers, так что буду очень рад помощи.

Ого виртуальная машина!

слева сверху на скрине конеч попадос

и да оперативе не будет хана?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, Bumer_32 сказал:

Ого виртуальная машина!

слева сверху на скрине конеч попадос

и да оперативе не будет хана?

Да, полноценная виртуалка, обязательно выпущу пост о ней, когда будет готова

За скрин сори) это случайно попало

Оперативы вполне хватает. Изображение экрана хранится в видеопамяти (что, кстати, минус, из-за необходимости версии мода 1.7.6).

Майнось показывает 30-40%, а в ней, между прочим, ещё и RAM-буфер юзается. Но not enough memory всё же возникает, если перезапускать виртуалку много раз подряд. Процесс сборки мусора никак не спровоцировать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Anon сказал:

Процесс сборки мусора никак не спровоцировать

Процесс уборки мусора провоцируется каждым десятым вызовом computer.pullSignal.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...