8032456: vm/jni/Miscellaneous/misc001/misc00101m1/misc00101m1.html failing on OS X

Chris Hegarty chris.hegarty at oracle.com
Fri Jan 24 11:17:04 UTC 2014


The change looks good to me Alan.

-Chris.

On 24/01/14 11:00, Alan Bateman wrote:
>
> I need a reviewer to fix an issue with the changes in JDK 8 to support
> statically linked JNI libraries. The issue arises with tests that have
> both JNI_OnLoad and JNI_OnLoad_libname functions defined, and code
> attempts to load the library more than once. In that scenario then both
> functions are called.
>
> Staffan Larsen did the hard work in JDK-8031968 where he observed that
> dlopen(NULL, RTLD_LAZY) behaves differently on OS X and that we should
> be using dlopen(NULL, RTLD_FIRST) to get the handle of the main program.
> Staffan has fixed this in the hotspot repository for JVM TI agent
> libraries, we need to do the same in the libjava code used by
> ClassLoader's native methods.
>
> Note that the include of string.h is not directly part of the issue
> here, instead it's just a drive-by fix to the warning related to the
> strcat usages.
>
> -Alan
>
>
> diff --git a/src/solaris/native/common/jni_util_md.c
> b/src/solaris/native/common/jni_util_md.c
> --- a/src/solaris/native/common/jni_util_md.c
> +++ b/src/solaris/native/common/jni_util_md.c
> @@ -23,6 +23,8 @@
>    * questions.
>    */
>
> +#include <string.h>
> +
>   #include "jni.h"
>   #include "jni_util.h"
>   #include "dlfcn.h"
> @@ -40,7 +42,11 @@
>       if (procHandle != NULL) {
>           return procHandle;
>       }
> -    procHandle = (void*)dlopen(NULL, RTLD_LAZY);
> +#ifdef __APPLE__
> +    procHandle = (void*)dlopen(NULL, RTLD_FIRST);
> +#else
> +    procHandle = (void*)dlopen(NULL, RTLD_LAZY);
> +#endif
>       return procHandle;
>   }
>



More information about the core-libs-dev mailing list