User: kz      
Date: 05/01/21 08:42:14

Modified:
 /dba/connectivity/source/drivers/jdbc/
  Object.cxx

Log:
 INTEGRATION: CWS dba22 (1.18.16); FILE MERGED
 2005/01/14 12:35:22 oj 1.18.16.3: #i39671# attachguard for every call
 2005/01/10 06:29:19 oj 1.18.16.2: compile error under linux
 2005/01/04 11:45:21 oj 1.18.16.1: #i39671# erase guard when no longer needed

File Changes:

Directory: /dba/connectivity/source/drivers/jdbc/
=================================================

File [changed]: Object.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/jdbc/Object.cxx?r1=1.18&r2=1.19
Delta lines:  +12 -28
---------------------
--- Object.cxx  9 Nov 2004 12:12:58 -0000       1.18
+++ Object.cxx  21 Jan 2005 16:42:11 -0000      1.19
@@ -114,54 +114,34 @@
        return xVM; 
 }
 // 
-----------------------------------------------------------------------------
-typedef ::std::map<oslThreadIdentifier,TGuard> TGuardMap;
-TGuardMap& lcl_getGuardMap()
-{
-       static TGuardMap s_sMap;
-       return s_sMap;
-}
-// 
-----------------------------------------------------------------------------
-TGuard getVMGuard()
-{
-       TGuardMap& s_sMap = lcl_getGuardMap();
-
-       oslThreadIdentifier id = osl_getThreadIdentifier(NULL);
-       TGuardMap::iterator aFind = s_sMap.find(id);
-       if ( aFind == s_sMap.end() )
-               aFind = s_sMap.insert(TGuardMap::value_type(id,TGuard(new 
jvmaccess::VirtualMachine::AttachGuard(java_lang_Object::getVM())))).first;
-       return aFind->second;
-}
-// 
-----------------------------------------------------------------------------
 SDBThreadAttach::SDBThreadAttach()
- : pEnv(NULL)
+ : m_aGuard(java_lang_Object::getVM())
+ , pEnv(NULL)
 {
-       m_aGuard = getVMGuard();
-       if ( m_aGuard.get() )
-               pEnv = m_aGuard->getEnvironment();
+       pEnv = m_aGuard.getEnvironment();
+    OSL_ENSURE(pEnv,"Environment is nULL!");
 }
 // 
-----------------------------------------------------------------------------
 SDBThreadAttach::~SDBThreadAttach()
 {
 }
 // 
-----------------------------------------------------------------------------
-sal_Int32& getJavaVMRefCount()
+oslInterlockedCount& getJavaVMRefCount()
 {
-       static sal_Int32 s_nRefCount = 0;
+       static oslInterlockedCount s_nRefCount = 0;
        return s_nRefCount;
 }
 // 
-----------------------------------------------------------------------------
 void SDBThreadAttach::addRef()
 {
-       getJavaVMRefCount()++;
+    osl_incrementInterlockedCount(&getJavaVMRefCount());
 }
 // 
-----------------------------------------------------------------------------
 void SDBThreadAttach::releaseRef()
 {
-       getJavaVMRefCount()--;
+    osl_decrementInterlockedCount(&getJavaVMRefCount());
        if ( getJavaVMRefCount() == 0 )
        {
-               TGuardMap& s_sMap = lcl_getGuardMap();
-               s_sMap.clear();
                getJavaVM2(::rtl::Reference< jvmaccess::VirtualMachine 
>(),sal_True);
        }
 }
@@ -186,12 +166,14 @@
 java_lang_Object::java_lang_Object(const Reference<XMultiServiceFactory >& 
_rxFactory)
                        : object( 0 ),m_xFactory(_rxFactory)
 {
+    SDBThreadAttach::addRef();
 }
 
 // der protected-Konstruktor fuer abgeleitete Klassen
 java_lang_Object::java_lang_Object( JNIEnv * pXEnv, jobject myObj )
        : object( NULL )
 {
+    SDBThreadAttach::addRef();
        if( pXEnv && myObj )
                object = pXEnv->NewGlobalRef( myObj );
 }
@@ -203,7 +185,9 @@
                SDBThreadAttach t;
                if( t.pEnv )
                        t.pEnv->DeleteGlobalRef( object );
+        object = NULL;
        }
+    SDBThreadAttach::releaseRef();
 }
 void java_lang_Object::clearObject(JNIEnv& rEnv)
 {




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to