summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--stoc/Library_javavm.mk6
-rw-r--r--stoc/source/javavm/javavm.cxx15
2 files changed, 21 insertions, 0 deletions
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 <premac.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <postmac.h>
+#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);
}