diff --git a/stoc/Library_javavm.mk b/stoc/Library_javavm.mk index e096565769f9..adcb49691ce1 100644 --- a/stoc/Library_javavm.mk +++ b/stoc/Library_javavm.mk @@ -31,4 +31,10 @@ $(eval $(call gb_Library_add_exception_objects,javavm,\ stoc/source/javavm/jvmargs \ )) +ifeq ($(OS),MACOSX) +$(eval $(call gb_Library_use_system_darwin_frameworks,javavm,\ + CoreFoundation \ +)) +endif + # vim:set noet sw=4 ts=4: diff --git a/stoc/source/javavm/javavm.cxx b/stoc/source/javavm/javavm.cxx index 091bb7779eeb..fa5883ae3fa7 100644 --- a/stoc/source/javavm/javavm.cxx +++ b/stoc/source/javavm/javavm.cxx @@ -79,6 +79,12 @@ #define TIMEZONE "MET" #endif +#ifdef MACOSX +#include +#include +#include +#endif + /* Within this implementation of the com.sun.star.java.JavaVirtualMachine * service and com.sun.star.java.theJavaVirtualMachine singleton, the method * com.sun.star.java.XJavaVM.getJavaVM relies on the following: @@ -459,6 +465,15 @@ public: explicit DetachCurrentThread(JavaVM * jvm): m_jvm(jvm) {} ~DetachCurrentThread() { +#ifdef MACOSX + // tdf#101376 don't detach thread if it is the main thread on macOS + // On macOS, many AWT classes do their work on the main thread + // deep in native methods in the java.awt.* classes. The problem + // is that Oracle's and OpenJDK's JVMs don't bracket their + // "perform on main thread" native calls with "attach/detach + // current thread" calls to the JVM. + if (CFRunLoopGetCurrent() != CFRunLoopGetMain()) +#endif if (m_jvm->DetachCurrentThread() != 0) { OSL_ASSERT(false); }