scheduler ---> wrap ---> t ~~~~~> thread ---> coroutine --- (up-value) --> foobar ---> super (userdata)
From my understanding, when "foobar" or "thread" goes out of scope, the whole thing should be garbage collected. What is happening is that only the
userdata inside foobar is collected but foobar is still a table. This table does not have any special mode.
function mdns.Registration(service_type, name, port, func)
func = func or dummy
local self = constr(service_type, name, port)
self.d = lk.Debug("registration", self)
print(getmetatable(self).fd)
self.thread = lk.Thread(function()
while true do
sched:waitRead(self:fd()) -- there is a yield here
--- self.super is dead
func(self:getService()) ----> Segmentation fault
end
end)
return self
end