stoc/Library_javavm.mk        |    6 ++++++
 stoc/source/javavm/javavm.cxx |   15 +++++++++++++++
 2 files changed, 21 insertions(+)

New commits:
commit 58320647950df01f1a23d07a90425e0b466a7f9d
Author:     Patrick Luby <plub...@neooffice.org>
AuthorDate: Sat Oct 14 21:13:26 2023 -0400
Commit:     Patrick Luby <plub...@neooffice.org>
CommitDate: Tue Oct 17 00:56:24 2023 +0200

    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.
    
    Change-Id: I0859dc9e20f34bd0b43bb321898507764fd530fb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157985
    Tested-by: Jenkins
    Reviewed-by: Patrick Luby <plub...@neooffice.org>
    (cherry picked from commit a0eee8e56b91324470bb0e15c6b8009cfc411335)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157963
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>
    Tested-by: Patrick Luby <plub...@neooffice.org>

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 12bcc2c904b7..dc22107fbf84 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:
@@ -456,6 +462,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);
         }

Reply via email to