Subject: Re: bug#46256: [feature/native-comp] AOT eln files ignored if run from build tree

From: Pip Cet <[email-masked]>
Date: Mon, 8 Mar 2021 15:09:07 +0000

On Mon, Mar 8, 2021 at 3:03 PM Andrea Corallo <[email-masked]> wrote:
> Pip Cet <[email-masked]> writes:
> > On Mon, Mar 8, 2021 at 10:14 AM Andrea Corallo <[email-masked]> wrote:
> > Have you modified dynlib_open() to leak the shared object? That's what
> > I think might be happening for Eli, so it makes sense to test with a
> > double dlopen() call, as I did.
>
> No, because I failed to understand why calling 'dlopen' two times in a
> row on the same filename should make any difference as I expect the
> second call to just return the same handle as the first.

It does.

What changes is that the next time we load the library, the first
(leaky) dlopen() will have kept it in memory, so the third and fourth
calls to dlopen() would also return the same handle as the first and
second calls did.

> I'm sure I'm missing something here or I misunderstood your suggestion:

I don't know whether you are, it's possible I am confused. What I do
know is if I apply the attached patch and run the reproducer, it
crashes rapidly, usually on the first run.

Pip
diff --git a/src/dynlib.c b/src/dynlib.c
index 1338e9109c91a..d29bdb1e86d0a 100644
--- a/src/dynlib.c
+++ b/src/dynlib.c
@@ -270,6 +270,7 @@ dynlib_close (dynlib_handle_ptr h)
 dynlib_handle_ptr
 dynlib_open (const char *path)
 {
+  dlopen (path, RTLD_LAZY);
   return dlopen (path, RTLD_LAZY);
 }