From: Cyrill Gorcunov via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Cc: tml <tarantool-patches@dev.tarantool.org> Subject: Re: [Tarantool-patches] [PATCH v21 6/6] test: add box.lib test Date: Mon, 12 Apr 2021 00:56:03 +0300 [thread overview] Message-ID: <YHNwc+oiGl2NGBjw@grain> (raw) In-Reply-To: <edaea916-5afa-9a5a-7b65-30df8859c493@tarantool.org> On Sun, Apr 11, 2021 at 05:43:02PM +0200, Vladislav Shpilevoy wrote: > > + | --- > > + | ... > > +assert(old_module['debug_refs'] == 3) -- box.lib + 2 box.schema.func > > 1. Why +2? There is only one function loaded from that module in > box.schema.func. Since schema.func loads module implicitly: for first load it increments not only own refs but low level module as well, then one more ref comes from function creation and finally one from new box.lib interface. IOW box.schema.func.create('cfunc.cfunc_add', {language = "C"}) box.func['cfunc.cfunc_add']:call({1,2}) --> func_c_call func_c_load schema_module_load schema_do_module_load module_load module_new module_ref(m); // ref = 1 func_c_load_from module_func_load module_ref(m) // ref = 2 old_module = box.lib.load('cfunc') --> lbox_module_load module_load cache_find module_ref(m); // ref = 3 Now when we unload function from box.schema.func func_c_unload schema_module_unref schema_module_delete module_unload // ref = 2 module_func_unload module_unref // ref = 1 So it only kept by `old_module`. > > +-- The box.lib instance should carry own > > +-- references to the module and old > > +-- function. And reloading must not > > +-- affect old functions. Thus one for > > +-- box.lib and one for box.lib function. > > 2. What do you mean "one for box.lib"? Typo, one for box.schema.func and one for box.lib. > > + > > +-- Same time the reload should update > > +-- low level module cache, thus two > > +-- for box and box function plus one > > 3. The same question. What is "for box"? > What exactly keeps these references? Two entries for box.schema.func and one for box.lib. I'll extend the comments. > > > +-- new box.lib. > > +new_module = box.lib.load('cfunc') > > + | --- > > + | ... > > +assert(new_module['debug_refs'] == 3) > > + | --- > > + | - true > > + | ... > > + > > 4. In the previous review I asked you to add tests > for automatic unload via GC. Please, add them. > > You can use collectgarbage('collect') functions, > and setmetatable(..., {__mode = 'v'}) if it will > help with anything. Will try, thanks, Vlad! > > See below my review fixes and on the branch in a > separate commit. Thanks, I'll merge them and send a final diff.
next prev parent reply other threads:[~2021-04-11 21:56 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-08 16:41 [Tarantool-patches] [PATCH v21 0/6] box: implement box.lib Lua module Cyrill Gorcunov via Tarantool-patches 2021-04-08 16:41 ` [Tarantool-patches] [PATCH v21 1/6] box/func: fix modules functions restore Cyrill Gorcunov via Tarantool-patches 2021-04-09 23:31 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-10 15:02 ` Cyrill Gorcunov via Tarantool-patches 2021-04-08 16:41 ` [Tarantool-patches] [PATCH v21 2/6] box/func: module_reload -- drop redundant argument Cyrill Gorcunov via Tarantool-patches 2021-04-08 16:41 ` [Tarantool-patches] [PATCH v21 3/6] box/module_cache: introduce modules subsystem Cyrill Gorcunov via Tarantool-patches 2021-04-09 23:54 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-10 14:59 ` Cyrill Gorcunov via Tarantool-patches 2021-04-08 16:41 ` [Tarantool-patches] [PATCH v21 4/6] box/schema.func: switch to new module api Cyrill Gorcunov via Tarantool-patches 2021-04-09 23:55 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-10 15:00 ` Cyrill Gorcunov via Tarantool-patches 2021-04-08 16:41 ` [Tarantool-patches] [PATCH v21 5/6] box: implement box.lib module Cyrill Gorcunov via Tarantool-patches 2021-04-11 15:38 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-11 22:38 ` Cyrill Gorcunov via Tarantool-patches 2021-04-12 22:08 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-12 22:34 ` Cyrill Gorcunov via Tarantool-patches 2021-04-08 16:41 ` [Tarantool-patches] [PATCH v21 6/6] test: add box.lib test Cyrill Gorcunov via Tarantool-patches 2021-04-08 18:53 ` Cyrill Gorcunov via Tarantool-patches 2021-04-11 15:43 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-11 21:56 ` Cyrill Gorcunov via Tarantool-patches [this message] 2021-04-11 22:36 ` Cyrill Gorcunov via Tarantool-patches 2021-04-12 22:08 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 7:10 ` Cyrill Gorcunov via Tarantool-patches 2021-04-13 21:53 ` [Tarantool-patches] [PATCH v21 0/6] box: implement box.lib Lua module Vladislav Shpilevoy via Tarantool-patches 2021-04-14 8:07 ` Kirill Yukhin via Tarantool-patches
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=YHNwc+oiGl2NGBjw@grain \ --to=tarantool-patches@dev.tarantool.org \ --cc=gorcunov@gmail.com \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v21 6/6] test: add box.lib test' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox