Войти
ПрограммированиеФорумОбщее

Исправления Lua и luabind для корректной работы с lua-потоками (комментарии)

#0
22:03, 4 фев. 2010

Исправления Lua и luabind для корректной работы с lua-потоками (комментарии)

Это сообщение сгенерировано автоматически.


#1
22:03, 4 фев. 2010

А разработчикам эта информация оправлена?

#2
0:32, 5 фев. 2010

Тока тока решил написать это ))

и всетаки, мне кажется я даже давал адресс куда отослать )

#3
0:37, 5 фев. 2010

Andrey
IROV..
Уже почти отправил =))) начал писать, но меня отвлекли, никак не выделю время. завтра точно допишу!

#4
17:03, 18 июля 2010

У разработчиков 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 имеется небольшая проблемка с выделением и освобождением памяти при использовании в программах имеющих собственные аллокаторы памяти.

Прошло более 6 месяцев
#5
9:25, 9 фев. 2011

kvi
> lua_pop(L, 1); <--- Потенциальная ошибка кроется именно здесь. На поток никто
> не ссылается. Почему бы GC его не прибить???
в моем примере это как раз и нужно. CG его прибивает. к этому моменту поток уже отработал. но GC сначала прибивает сам поток, а потом объекты которые были в нем созданы.  а в объектах луабинд хранится указатель на луа-стайт (в данном случае на поток) которая вовсе не нужна для освобождения ресурсов

ps.
сорри за некропостинг )))

ПрограммированиеФорумОбщее

Тема в архиве.