Исправления Lua и luabind для корректной работы с lua-потоками (комментарии)
Это сообщение сгенерировано автоматически.
А разработчикам эта информация оправлена?
Тока тока решил написать это ))
и всетаки, мне кажется я даже давал адресс куда отослать )
Andrey
IROV..
Уже почти отправил =))) начал писать, но меня отвлекли, никак не выделю время. завтра точно допишу!
У разработчиков lua и luabind все хорошо. Ошибка в правильности создания и освобождения потоков Lua в наших кодах.:)
lua_State* thread = lua_newthread(L);
lua_pop(L, 1); <--- Потенциальная ошибка кроется именно здесь. На поток никто не ссылается. Почему бы GC его не прибить???
API Lua имеет две функции: luaL_ref, luaL_unref с их помощью лечится "Access violation ... приведенного примера . И соответственно нет необходимости править исходники Lua и luabind !!!
lua_State* thread = lua_newthread(L);
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
// Код примера
lua_gc(L, LUA_GCCOLLECT, 0);
luaL_unref(L, LUA_REGISTRYINDEX, ref);
P/S. В luabind версии 0.9 имеется небольшая проблемка с выделением и освобождением памяти при использовании в программах имеющих собственные аллокаторы памяти.
kvi
> lua_pop(L, 1); <--- Потенциальная ошибка кроется именно здесь. На поток никто
> не ссылается. Почему бы GC его не прибить???
в моем примере это как раз и нужно. CG его прибивает. к этому моменту поток уже отработал. но GC сначала прибивает сам поток, а потом объекты которые были в нем созданы. а в объектах луабинд хранится указатель на луа-стайт (в данном случае на поток) которая вовсе не нужна для освобождения ресурсов
ps.
сорри за некропостинг )))
Тема в архиве.