ce965424c3
Lua will remove objects as values from a weak table before these objects are finalized, but as values only in the next garbage collection cycle after the object was finalized. Up to now, gears.object uses a table with weak keys so that :disconnect_signal() works. This means that a signal can still call methods which were already considered garbage by the garbage collector and thus can use userdata from the C side which was already finalized. Crashes and other bugs result. This commit changes the code so that the function is also a value in the weak table. Thus, the GC will remove the entry before the object is finalized. Special magic is needed for Lua 5.1, because there only userdata has the behavior that we want while we have a function. We do some magic with function environments to make this work... Closes https://github.com/awesomeWM/awesome/pull/567. Signed-off-by: Uli Schlachter <psychon@znc.in> |
||
---|---|---|
.. | ||
cache.lua | ||
color.lua | ||
debug.lua | ||
init.lua | ||
matrix.lua | ||
object.lua | ||
sort.lua | ||
surface.lua | ||
timer.lua | ||
wallpaper.lua |