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]
