[Libreoffice-commits] .: connectivity/source

Stephan Bergmann sbergmann at kemper.freedesktop.org
Fri Jan 13 00:44:04 PST 2012


 connectivity/source/drivers/jdbc/exports.dxp   |    1 +
 connectivity/source/drivers/jdbc/jservices.cxx |   16 +++++++++++++++-
 connectivity/source/drivers/jdbc/makefile.mk   |    2 --
 3 files changed, 16 insertions(+), 3 deletions(-)

New commits:
commit bb59742bcf4883af5876a2ffadcc4a689e414b60
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Jan 13 09:38:07 2012 +0100

    Confine JDBC driver to thread-affine apartment for Java 6 performance
    
    ... so that the massive number of the JDBC driver's calls to JNI Attach/Detach-
    CurrentThread are guaranteed not to happen on the main thread (where they are
    extremely expensive, see
    <http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6978641> "Fix for 6929067
    introduces additional overhead in thread creation/termination paths").

diff --git a/connectivity/source/drivers/jdbc/exports.dxp b/connectivity/source/drivers/jdbc/exports.dxp
index 7003307..f0e1c69 100755
--- a/connectivity/source/drivers/jdbc/exports.dxp
+++ b/connectivity/source/drivers/jdbc/exports.dxp
@@ -1 +1,2 @@
+component_getImplementationEnvironment
 component_getFactory
diff --git a/connectivity/source/drivers/jdbc/jservices.cxx b/connectivity/source/drivers/jdbc/jservices.cxx
index 59c73ff..85df771 100644
--- a/connectivity/source/drivers/jdbc/jservices.cxx
+++ b/connectivity/source/drivers/jdbc/jservices.cxx
@@ -83,7 +83,21 @@ struct ProviderRequest
     void* getProvider() const { return xRet.get(); }
 };
 
-//---------------------------------------------------------------------------------------
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL
+component_getImplementationEnvironment(
+    char const ** ppEnvTypeName, uno_Environment **)
+{
+    // Recent Java 6 VMs make calls to JNI Attach/DetachCurrentThread (which
+    // this code does extensively) very expensive.  A follow-up JVM fix reduced
+    // the overhead significantly again for all threads but the main thread.  So
+    // a quick hack to improve performance of this component again is to confine
+    // it in the affine apartment (where all code will run on a single,
+    // dedicated thread that is guaranteed no to be the main thread).  However,
+    // a better fix would still be to redesign the code so that it does not call
+    // Attach/DetachCurrentThread so frequently:
+    *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ":affine";
+}
+
 extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory(
                     const sal_Char* pImplementationName,
                     void* pServiceManager,
diff --git a/connectivity/source/drivers/jdbc/makefile.mk b/connectivity/source/drivers/jdbc/makefile.mk
index befdc73..4229c8f 100755
--- a/connectivity/source/drivers/jdbc/makefile.mk
+++ b/connectivity/source/drivers/jdbc/makefile.mk
@@ -78,8 +78,6 @@ SLOFILES=\
         $(SLO)$/tools.obj                           \
         $(SLO)$/ContextClassLoader.obj
 
-SHL1VERSIONMAP=$(SOLARENV)/src/component.map
-
 # --- Library -----------------------------------
 
 SHL1TARGET=	$(JDBC_TARGET)$(DLLPOSTFIX)


More information about the Libreoffice-commits mailing list