On Thu, Nov 5, 2020 at 2:23 PM zero <daohu...@gmail.com> wrote:

> If step 3 were to *really* unload A, how would B's code, which is still
>> loaded and may be using symbols from A, continue to work?
>
>
> Yes step 3 will not unload A, and A is still in memory, when dlopen(A)
> again, it will return a handle, and will not do the init progress.
>

So this is the same as will happen in OSv... Are you suggesting that it
doesn't? Or just *asking* what happens?
I think I tried to answer what should happen in my last email - please be
more explicit if you tested OSv and Linux and
found that OSv does the wrong and/or different-from-Linux thing.


> So I ask how OSv implements the reference count.
>

When OSv loads a shared object A, either - as you called it - "explicitly"
(dlopen()) or "implicitly" (needed by another object) - if it is not in
memory it is loaded and its reference count is 1, but if it's already
loaded, its reference count is incremented. The reference count of the
object is also incremented when some other object uses a function f() and
resolving it happened to resolve to f() in A. These reference counts get
decremented back when those other objects get unloaded, and when A's
reference count eventually drops to 0, it will be completely removed from
memory (and all of A's static variables also get lost).

>
> If it depends on the path, then it will be a little different from dlopen
> implement.
>

I don't understand what you mean here. What do you mean "depends on the
path"?
If you look at core/elf.cc, program::load_object() you'll see that indeed,
already-loaded objects are looked up by object names, which are parts of
the full path name of the file. Are you thinking, maybe, about the
possibility that a single object has two names (perhaps a symbolic link, or
something)e?

If you want to explain to me that there is a bug, and/or difference from
Linux, the best thing to do is to write a simple example and run it on
Linux and OSv and demonstrate how it behaves differently (if it does).

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/CANEVyjvWvSrbczu9Gxzu2WPXaP-iRB3kob%3DVswYALa-8-3PGug%40mail.gmail.com.

Reply via email to