[foreign] NPE when trying to lookup a symbol in the default library when no libraries are loaded
Sundararajan Athijegannathan
sundararajan.athijegannathan at oracle.com
Thu Sep 13 03:58:59 UTC 2018
Magic of timezone difference :) Nice to see that you've located the issue...
-Sundar
On 13/09/18, 2:05 AM, Jorn Vernee wrote:
>> Never mind I found it :)
>>
>> void* getDefaultHandle() {
>> // FIXME: This is not yet tested on Windows.
>> return getProcessHandle();
>> }
>
> And here's a possible fix [1]
>
> This fixes 2 bugs:
>
> 1.) When no library was loaded ClassLoader#NativeLibrary#getFromClass
> threw an NPE (at least on windows). That is fixed by returning
> defaultLibrary.fromClass when the nativeLibraryContext is empty.
>
> 2.) The default library search was not working on windows. It was
> using a default handle, which works on unix (dlsym(RTLD_DEFAULT)), but
> not on windows (see https://stackoverflow.com/q/23437007). I have
> changed the implementation from using a default handle to using a new
> native function findEntryInProcess, which does the right thing for
> Windows (iterate over all loaded modules), and does the same thing it
> used to for unix. findEntry is now a Java method, and the original
> findEntry is renamed to findEntry0. The NativeLibrary implementation
> of findEntry forwards to findEntry0, and the anonymous class of the
> default library overrides to forward to findEntryInProcess.
>
> For future reference,
> Jorn
>
> [1] : https://gist.github.com/JornVernee/7d45780df082cbfb27417b437c7b13a8
More information about the panama-dev
mailing list