[Libreoffice-commits] core.git: extensions/source

Tor Lillqvist tml at collabora.com
Fri Mar 9 11:12:14 UTC 2018


 extensions/source/ole/olethread.cxx |   28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

New commits:
commit 2445d97a31d2fb3ee6580444a3541653f9fdb642
Author: Tor Lillqvist <tml at collabora.com>
Date:   Thu Mar 8 12:40:28 2018 +0200

    Make the CoInitializeEx() (non-)error reporting ludicrously verbose
    
    Tell in the SAL_WARN what apartment mode the thread is in.
    
    It's a bit unclear to me why the code insists on calling this
    o2u_attachCurrentThread() function even in cases where it perhaps
    should know that it is in the main thread, which has been initialised
    as STA by the CoInitialize() in InitSalData().
    
    Change-Id: Ia69e67f8b17ee153d3bcf8ae450d5f413dea2e1a
    Reviewed-on: https://gerrit.libreoffice.org/50985
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/extensions/source/ole/olethread.cxx b/extensions/source/ole/olethread.cxx
index 6bb0c5daab2a..3b35a802a5f8 100644
--- a/extensions/source/ole/olethread.cxx
+++ b/extensions/source/ole/olethread.cxx
@@ -19,6 +19,7 @@
 
 #include "ole2uno.hxx"
 
+#include <comphelper/windowserrorstring.hxx>
 #include <osl/thread.hxx>
 #include <sal/log.hxx>
 
@@ -34,8 +35,31 @@ void o2u_attachCurrentThread()
         if (!SUCCEEDED(hr))
         {   // FIXME: is it a problem that this ends up in STA currently?
             assert(RPC_E_CHANGED_MODE == hr);
-            SAL_INFO("extensions.olebridge",
-                    "CoInitializeEx fail: probably thread is in STA already?");
+            // Let's find out explicitly what aprtment mode we are in.
+            SAL_WARN("extensions.olebridge", "CoInitializeEx failed"
+                     << (hr == RPC_E_CHANGED_MODE ? " (expectedly)" : "")
+                     << ": " << WindowsErrorStringFromHRESULT(hr));
+            APTTYPE nAptType;
+            APTTYPEQUALIFIER nAptTypeQualifier;
+            if (SUCCEEDED(CoGetApartmentType(&nAptType, &nAptTypeQualifier)))
+            {
+                SAL_WARN("extensions.olebridge",
+                         "  Thread is in a "
+                         << (nAptType == APTTYPE_STA ? OUString("single-threaded") :
+                             (nAptType == APTTYPE_MTA ? OUString("multi-threaded") :
+                              (nAptType == APTTYPE_NA ? OUString("neutral") :
+                               (nAptType == APTTYPE_MAINSTA ? OUString("main single-threaded") :
+                                ("unknown (") + OUString::number(nAptType) + ")"))))
+                         << " apartment"
+                         << (nAptTypeQualifier == APTTYPEQUALIFIER_NONE ? OUString() :
+                             (nAptTypeQualifier == APTTYPEQUALIFIER_IMPLICIT_MTA ? OUString(" (implicit)") :
+                              (nAptTypeQualifier == APTTYPEQUALIFIER_NA_ON_MTA ? OUString(" (on MTA)") :
+                               (nAptTypeQualifier == APTTYPEQUALIFIER_NA_ON_STA ? OUString(" (on STA)") :
+                                (nAptTypeQualifier == APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA ? OUString(" (on implicit MTA)") :
+                                 (nAptTypeQualifier == APTTYPEQUALIFIER_NA_ON_MAINSTA ? OUString(" (on main STA)") :
+                                  (" (with unknown qualifier (" + OUString::number(nAptTypeQualifier) + "))")))))))
+                         << ".");
+            }
         }
         oleThreadData.setData(reinterpret_cast<void*>(true));
     }


More information about the Libreoffice-commits mailing list