[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