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