[Libreoffice-commits] core.git: desktop/source include/vcl vcl/Library_vcl.mk vcl/source

Luboš Luňák (via logerrit) logerrit at kemper.freedesktop.org
Tue Apr 7 12:46:42 UTC 2020


 desktop/source/app/app.cxx         |    5 +----
 desktop/source/app/sofficemain.cxx |    9 ---------
 include/vcl/glxtestprocess.hxx     |   18 ++++++++++++++++++
 vcl/Library_vcl.mk                 |    8 ++++++++
 vcl/source/opengl/OpenGLHelper.cxx |   18 ++++++++++++++++++
 vcl/source/salmain/salmain.cxx     |    2 --
 6 files changed, 45 insertions(+), 15 deletions(-)

New commits:
commit 43b8ee70fcedfb1a2c3ef996cea4842e06e020b0
Author:     Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Tue Apr 7 13:10:01 2020 +0200
Commit:     Luboš Luňák <l.lunak at collabora.com>
CommitDate: Tue Apr 7 14:46:03 2020 +0200

    reap the glxtest child even if OpenGL is not used
    
    E.g. with Skia enabled (thus blocking OpenGL) the zombie stays around.
    
    Change-Id: I9769ec804e4727189bbfe58d415e8ad3a6b234ed
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91811
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>

diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index c00885433eac..2fb7b048231f 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -1558,13 +1558,10 @@ int Desktop::Main()
 #endif
 
         // In headless mode, reap the process started by fire_glxtest_process() early in soffice_main
-        // (desktop/source/app/sofficemain.cxx), in a code block that needs to be covered by the same
-        // #if condition as this code block:
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI && HAVE_FEATURE_OPENGL
+        // (desktop/source/app/sofficemain.cxx).
         if (rCmdLineArgs.IsHeadless()) {
             reap_glxtest_process();
         }
-#endif
 
         // Release solar mutex just before we wait for our client to connect
         {
diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx
index 90e322260c1e..d95356fd255d 100644
--- a/desktop/source/app/sofficemain.cxx
+++ b/desktop/source/app/sofficemain.cxx
@@ -59,17 +59,8 @@ extern "C" int DESKTOP_DLLPUBLIC soffice_main()
     CrashReporter::installExceptionHandler();
 #endif
 
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI && HAVE_FEATURE_OPENGL
-    /* Run test for OpenGL support in own process to avoid crash with broken
-     * OpenGL drivers. Start process as early as possible.
-     * In non-headless mode, the process will be reaped in X11OpenGLDeviceInfo::GetData
-     * (vcl/opengl/x11/X11DeviceInfo.cxx).  In headless mode, the process will be reaped late in
-     * Desktop::Main (desktop/source/app/app.cxx), in a code block that needs to be covered by the
-     * same #if condition as this code block.
-     */
     bool bSuccess = fire_glxtest_process();
     SAL_WARN_IF(!bSuccess, "desktop.opengl", "problems with glxtest");
-#endif
 
 #if defined ANDROID
     try {
diff --git a/include/vcl/glxtestprocess.hxx b/include/vcl/glxtestprocess.hxx
index b13312ebda64..848135442867 100644
--- a/include/vcl/glxtestprocess.hxx
+++ b/include/vcl/glxtestprocess.hxx
@@ -10,11 +10,29 @@
 #ifndef INCLUDED_INCLUDE_VCL_GLXTESTPROCESS_HXX
 
 #include <sal/config.h>
+#include <config_features.h>
+
+#if defined(UNX) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI         \
+    && HAVE_FEATURE_OPENGL
+/* Run test for OpenGL support in own process to avoid crash with broken
+ * OpenGL drivers. Start process as early as possible.
+ * In non-headless mode, the process will be reaped in X11OpenGLDeviceInfo::GetData
+ * (vcl/opengl/x11/X11DeviceInfo.cxx).  In headless mode, the process will be reaped late in
+ * Desktop::Main (desktop/source/app/app.cxx).
+ */
 
 bool fire_glxtest_process();
 
 void reap_glxtest_process();
 
+#else
+
+inline bool fire_glxtest_process() { return true; }
+
+inline void reap_glxtest_process() {}
+
+#endif
+
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 39d99957883e..25b2e7f66be1 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -724,4 +724,12 @@ $(eval $(call gb_Library_add_nativeres,vcl,vcl/salsrc))
 $(eval $(call gb_Library_use_package,vcl,postprocess_images))
 endif
 
+ifeq ($(OS), $(filter LINUX %BSD SOLARIS, $(OS)))
+ifeq ($(USING_X11),TRUE)
+$(eval $(call gb_Library_use_static_libraries,vcl,\
+	glxtest \
+))
+endif
+endif
+
 # vim: set noet sw=4 ts=4:
diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx
index 60f023b7dc4c..1ea130942ba0 100644
--- a/vcl/source/opengl/OpenGLHelper.cxx
+++ b/vcl/source/opengl/OpenGLHelper.cxx
@@ -35,6 +35,7 @@
 #include <bitmapwriteaccess.hxx>
 #include <watchdog.hxx>
 #include <vcl/skia/SkiaHelper.hxx>
+#include <vcl/glxtestprocess.hxx>
 
 #if defined UNX && !defined MACOSX && !defined IOS && !defined ANDROID && !defined HAIKU
 #include <opengl/x11/X11DeviceInfo.hxx>
@@ -903,11 +904,26 @@ PreDefaultWinNoOpenGLZone::~PreDefaultWinNoOpenGLZone()
     bTempOpenGLDisabled = false;
 }
 
+static void reapGlxTest()
+{
+    // Reap the glxtest child, or it'll stay around as a zombie,
+    // as X11OpenGLDeviceInfo::GetData() will not get called.
+    static bool bTestReaped = false;
+    if(!bTestReaped)
+    {
+        reap_glxtest_process();
+        bTestReaped = true;
+    }
+}
+
 bool OpenGLHelper::isVCLOpenGLEnabled()
 {
     // Skia always takes precedence if enabled
     if( SkiaHelper::isVCLSkiaEnabled())
+    {
+        reapGlxTest();
         return false;
+    }
 
     /**
      * The !bSet part should only be called once! Changing the results in the same
@@ -965,6 +981,8 @@ bool OpenGLHelper::isVCLOpenGLEnabled()
 
     if (bRet)
         WatchdogThread::start();
+    else
+        reapGlxTest();
 
     CrashReporter::addKeyValue("UseOpenGL", OUString::boolean(bRet), CrashReporter::Write);
 
diff --git a/vcl/source/salmain/salmain.cxx b/vcl/source/salmain/salmain.cxx
index d0771d236824..d03f6b2cd28b 100644
--- a/vcl/source/salmain/salmain.cxx
+++ b/vcl/source/salmain/salmain.cxx
@@ -27,9 +27,7 @@
 #include <vcl/svmain.hxx>
 
 SAL_IMPLEMENT_MAIN() {
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI && !defined HAIKU
     fire_glxtest_process();
-#endif
     tools::extendApplicationEnvironment();
     vclmain::createApplication();
     return SVMain();


More information about the Libreoffice-commits mailing list