tarantool/mysql

Seems that gc handler of connection can yield

filonenko-mikhail opened this issue · 1 comments

There is garbage collector for lua. It's prohibited to yield inside gc cycle. Any gc hook have to not use yielding calls.

There is probably yielding here. It's gc hook for connection and logic to put connection back to pool — pool:put. And inside pool:put channel can be put. And fiber.channel.put can yield in case when listener exists.

https://github.com/tarantool/mysql/blob/master/mysql/init.lua#L51

AFAIR, those get() and put() should be balanced in the sense that this put() always adds an object to a non-full channel. Anyway, it would be good to check it in the code and at least log if something goes wrong.