[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-serviceability-dev
Subject: Re: RFR: JDK-8320890: [AIX] Find a better way to mimic dl handle equality [v11]
From: Martin Doerr <mdoerr () openjdk ! org>
Date: 2023-12-27 10:52:59
Message-ID: ikm5kEvrEb3lJHYHpQG5k-CPiRQqytIRYWltTZLjZcY=.444980ac-c1e1-4b23-b70e-c504d1386251 () github ! com
[Download RAW message or body]
On Fri, 22 Dec 2023 15:57:05 GMT, Joachim Kern <jkern@openjdk.org> wrote:
> > On AIX, repeated calls to dlopen referring to the same shared library may result \
> > in different, unique dl handles to be returned from libc. In that it differs from \
> > typical libc implementations that cache dl handles.
> > This causes problems in the JVM with code that assumes equality of handles. One \
> > such problem is in the JVMTI agent handler. That problem was fixed with a local \
> > fix to said handler ([JDK-8315706](https://bugs.openjdk.org/browse/JDK-8315706)). \
> > However, this fix causes follow-up problems since it assumes that the file name \
> > passed to `os::dll_load()` is the file that has been opened. It prevents \
> > efficient, os_aix.cpp-local workarounds for other AIX issues like the *.so/*.a \
> > duality. See [JDK-8320005](https://bugs.openjdk.org/browse/JDK-8320005). As such, \
> > it is a hack that causes other, more uglier hacks to follow (see discussion of \
> > https://github.com/openjdk/jdk/pull/16604).
> > We propose a different, cleaner way of handling this:
> >
> > - Handle this entirely inside the AIX versions of os::dll_load and \
> > os::dll_unload.
> > - Cache dl handles; repeated opening of a library should return the cached \
> > handle.
> > - Increase handle-local ref counter on open, Decrease it on close
> > - Make sure calls to os::dll_load are matched to os::dll_unload (See \
> > [JDK-8320830](https://bugs.openjdk.org/browse/JDK-8320830)).
> > This way we mimic dl handle equality as it is implemented on other platforms, and \
> > this works for all callers of os::dll_load.
>
> Joachim Kern has updated the pull request incrementally with one additional commit \
> since the last revision:
> No need for malloc
src/hotspot/os/aix/porting_aix.cpp line 975:
> 973: return false;
> 974:
> 975: char* path2 = os::strdup (path);
Whitespace between `os::strdup` and `(path)`.
src/hotspot/os/aix/porting_aix.cpp line 1019:
> 1017: }
> 1018:
> 1019: char* libpath = os::strdup (Libpath.base());
Whitespace!
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16920#discussion_r1436947479
PR Review Comment: https://git.openjdk.org/jdk/pull/16920#discussion_r1436947817
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic