RFR: JDK-8329850: [AIX] Allow loading of different members of same shared library archive
Joachim Kern
jkern at openjdk.org
Mon Apr 8 13:07:11 UTC 2024
On Mon, 8 Apr 2024 12:54:56 GMT, Martin Doerr <mdoerr at openjdk.org> wrote:
>> With [JDK-8320890](https://bugs.openjdk.org/browse/JDK-8320890) we introduced the capability not to load shared libraries twice if the application wants to do that. Instead we just rise a ref counter. Unfortunately this also suppresses the loading of a second member of a shared library.
>> This fix introduces an additionally stored hash value for each loaded member and only suppresses duplicate loading if the same member is loaded twice.
>> If a shared library has no member a hash value of 0 is used to make the code orthogonal.
>
> src/hotspot/os/aix/porting_aix.cpp line 1061:
>
>> 1059: hash = (hash << 5) - hash + (unsigned long)*substr++;
>> 1060: }
>> 1061: }
>
> Should work in practical cases, but what if a hash collision occurs?
How likely is a hash collision? My first thought was to store the member string in an additional array. But there is no length limitation. So I cannot just add an char array of e.g. 20 chars, but have to use a pointer to an external dynamically loaded memory holding the string. I came to the conclusion that a hash is much more elegant with a neglectable small risk of a hash collision.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18676#discussion_r1555812656
More information about the hotspot-runtime-dev
mailing list