You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jb...@apache.org on 2017/05/17 17:50:28 UTC
[46/46] geode-native git commit: GEODE-2741: Workaround for static
de-init issues with CLR.
GEODE-2741: Workaround for static de-init issues with CLR.
Project: http://git-wip-us.apache.org/repos/asf/geode-native/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode-native/commit/767033e5
Tree: http://git-wip-us.apache.org/repos/asf/geode-native/tree/767033e5
Diff: http://git-wip-us.apache.org/repos/asf/geode-native/diff/767033e5
Branch: refs/heads/develop
Commit: 767033e5cfd70b3ad41cac67d63db464b3697a85
Parents: d58a5e3
Author: Jacob Barrett <jb...@pivotal.io>
Authored: Wed May 17 04:09:22 2017 +0000
Committer: Jacob Barrett <jb...@pivotal.io>
Committed: Wed May 17 05:05:51 2017 +0000
----------------------------------------------------------------------
src/cppcache/include/geode/CacheFactory.hpp | 3 +-
src/cppcache/src/CacheFactory.cpp | 14 ++++----
.../src/CacheTransactionManagerImpl.cpp | 4 +--
src/cppcache/src/TXState.cpp | 2 +-
src/cppcache/src/ThinClientStickyManager.cpp | 34 ++++++++++----------
src/cppcache/src/TssConnectionWrapper.cpp | 2 +-
src/cppcache/src/TssConnectionWrapper.hpp | 3 +-
7 files changed, 33 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode-native/blob/767033e5/src/cppcache/include/geode/CacheFactory.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/include/geode/CacheFactory.hpp b/src/cppcache/include/geode/CacheFactory.hpp
index 5d519bb..b9c149d 100644
--- a/src/cppcache/include/geode/CacheFactory.hpp
+++ b/src/cppcache/include/geode/CacheFactory.hpp
@@ -494,7 +494,8 @@ class CPPCACHE_EXPORT CacheFactory
bool closeOk, CachePtr& cptr);
// Set very first time some creates cache
- static CacheFactoryPtr default_CacheFactory;
+ // TODO shared_ptr - remove or refactor with global work
+ static CacheFactoryPtr* default_CacheFactory;
static PoolPtr createOrGetDefaultPool();
static void* m_cacheMap;
static void init();
http://git-wip-us.apache.org/repos/asf/geode-native/blob/767033e5/src/cppcache/src/CacheFactory.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/CacheFactory.cpp b/src/cppcache/src/CacheFactory.cpp
index ec332e5..97a2adf 100644
--- a/src/cppcache/src/CacheFactory.cpp
+++ b/src/cppcache/src/CacheFactory.cpp
@@ -55,7 +55,7 @@ typedef std::map<std::string, CachePtr> StringToCachePtrMap;
void* CacheFactory::m_cacheMap = (void*)NULL;
-CacheFactoryPtr CacheFactory::default_CacheFactory = nullptr;
+CacheFactoryPtr* CacheFactory::default_CacheFactory = nullptr;
PoolPtr CacheFactory::createOrGetDefaultPool() {
ACE_Guard<ACE_Recursive_Thread_Mutex> connectGuard(*g_disconnectLock);
@@ -71,9 +71,10 @@ PoolPtr CacheFactory::createOrGetDefaultPool() {
// if default_poolFactory is null then we are not using latest API....
if (pool == nullptr && Cache_CreatedFromCacheFactory) {
- if (default_CacheFactory != nullptr) {
- pool = default_CacheFactory->determineDefaultPool(cache);
+ if (default_CacheFactory && (*default_CacheFactory)) {
+ pool = (*default_CacheFactory)->determineDefaultPool(cache);
}
+ (*default_CacheFactory) = nullptr;
default_CacheFactory = nullptr;
}
@@ -225,7 +226,7 @@ CachePtr CacheFactory::create() {
cache = getAnyInstance(false);
if (cache == nullptr) {
- default_CacheFactory = shared_from_this();
+ default_CacheFactory = new CacheFactoryPtr(shared_from_this());
Cache_CreatedFromCacheFactory = true;
cache = create(DEFAULT_CACHE_NAME, dsPtr,
dsPtr->getSystemProperties()->cacheXMLFile(), nullptr);
@@ -237,8 +238,9 @@ CachePtr CacheFactory::create() {
determineDefaultPool(cache);
} else {
// not yet created, create from first cacheFactory instance
- if (default_CacheFactory != nullptr) {
- default_CacheFactory->determineDefaultPool(cache);
+ if (default_CacheFactory && (*default_CacheFactory)) {
+ (*default_CacheFactory)->determineDefaultPool(cache);
+ (*default_CacheFactory) = nullptr;
default_CacheFactory = nullptr;
}
determineDefaultPool(cache);
http://git-wip-us.apache.org/repos/asf/geode-native/blob/767033e5/src/cppcache/src/CacheTransactionManagerImpl.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/CacheTransactionManagerImpl.cpp b/src/cppcache/src/CacheTransactionManagerImpl.cpp
index bdea6db..58e5a02 100644
--- a/src/cppcache/src/CacheTransactionManagerImpl.cpp
+++ b/src/cppcache/src/CacheTransactionManagerImpl.cpp
@@ -313,7 +313,7 @@ GfErrType CacheTransactionManagerImpl::rollback(TXState* txState,
}
ThinClientPoolDM* CacheTransactionManagerImpl::getDM() {
- TcrConnection* conn = TssConnectionWrapper::s_geodeTSSConn->getConnection();
+ TcrConnection* conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
if (conn != NULL) {
ThinClientPoolDM* dm = conn->getEndpointObject()->getPoolHADM();
if (dm != NULL) {
@@ -334,7 +334,7 @@ TransactionIdPtr CacheTransactionManagerImpl::suspend() {
}
// get the current connection that this transaction is using
- TcrConnection* conn = TssConnectionWrapper::s_geodeTSSConn->getConnection();
+ TcrConnection* conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
if (conn == NULL) {
LOGFINE("Thread local connection is null. Returning NULL transaction Id.");
return nullptr;
http://git-wip-us.apache.org/repos/asf/geode-native/blob/767033e5/src/cppcache/src/TXState.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/TXState.cpp b/src/cppcache/src/TXState.cpp
index 89f327a..ad81186 100644
--- a/src/cppcache/src/TXState.cpp
+++ b/src/cppcache/src/TXState.cpp
@@ -110,7 +110,7 @@ void TXState::releaseStickyConnection() {
// Since this is called during cleanup or through destructor, we should not
// throw exception from here,
// which can cause undefined cleanup.
- TcrConnection* conn = TssConnectionWrapper::s_geodeTSSConn->getConnection();
+ TcrConnection* conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
if (conn != NULL) {
ThinClientPoolDM* dm = conn->getEndpointObject()->getPoolHADM();
if (dm != NULL) {
http://git-wip-us.apache.org/repos/asf/geode-native/blob/767033e5/src/cppcache/src/ThinClientStickyManager.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/ThinClientStickyManager.cpp b/src/cppcache/src/ThinClientStickyManager.cpp
index cfac1db..af6ce46 100644
--- a/src/cppcache/src/ThinClientStickyManager.cpp
+++ b/src/cppcache/src/ThinClientStickyManager.cpp
@@ -23,7 +23,7 @@ bool ThinClientStickyManager::getStickyConnection(
bool maxConnLimit = false;
bool connFound = false;
// ACE_Guard<ACE_Recursive_Thread_Mutex> guard( m_stickyLock );
- conn = TssConnectionWrapper::s_geodeTSSConn->getConnection();
+ conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
if (!conn) {
conn =
@@ -50,34 +50,34 @@ bool ThinClientStickyManager::getStickyConnection(
void ThinClientStickyManager::getSingleHopStickyConnection(
TcrEndpoint* theEP, TcrConnection*& conn) {
- conn = TssConnectionWrapper::s_geodeTSSConn->getSHConnection(theEP,
+ conn = (*TssConnectionWrapper::s_geodeTSSConn)->getSHConnection(theEP,
m_dm->getName());
}
void ThinClientStickyManager::addStickyConnection(TcrConnection* conn) {
ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
TcrConnection* oldConn =
- TssConnectionWrapper::s_geodeTSSConn->getConnection();
+ (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
if (oldConn) {
std::set<TcrConnection**>::iterator it = m_stickyConnList.find(
- TssConnectionWrapper::s_geodeTSSConn->getConnDoublePtr());
+ (*TssConnectionWrapper::s_geodeTSSConn)->getConnDoublePtr());
if (it != m_stickyConnList.end()) {
oldConn->setAndGetBeingUsed(false, false);
m_stickyConnList.erase(it);
PoolPtr p = nullptr;
- TssConnectionWrapper::s_geodeTSSConn->setConnection(NULL, p);
+ (*TssConnectionWrapper::s_geodeTSSConn)->setConnection(NULL, p);
m_dm->put(oldConn, false);
}
}
if (conn) {
- TssConnectionWrapper::s_geodeTSSConn->setConnection(
+ (*TssConnectionWrapper::s_geodeTSSConn)->setConnection(
conn, m_dm->shared_from_this());
conn->setAndGetBeingUsed(true, true); // this is done for transaction
// thread when some one resume
// transaction
m_stickyConnList.insert(
- TssConnectionWrapper::s_geodeTSSConn->getConnDoublePtr());
+ (*TssConnectionWrapper::s_geodeTSSConn)->getConnDoublePtr());
}
}
@@ -86,21 +86,21 @@ void ThinClientStickyManager::setStickyConnection(TcrConnection* conn,
// ACE_Guard<ACE_Recursive_Thread_Mutex> guard( m_stickyLock );
if (!conn) {
ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
- TssConnectionWrapper::s_geodeTSSConn->setConnection(
+ (*TssConnectionWrapper::s_geodeTSSConn)->setConnection(
NULL, m_dm->shared_from_this());
} else {
TcrConnection* currentConn =
- TssConnectionWrapper::s_geodeTSSConn->getConnection();
+ (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
if (currentConn != conn) // otherwsie no need to set it again
{
ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
- TssConnectionWrapper::s_geodeTSSConn->setConnection(
+ (*TssConnectionWrapper::s_geodeTSSConn)->setConnection(
conn, m_dm->shared_from_this());
conn->setAndGetBeingUsed(
false,
forTransaction); // if transaction then it will keep this as used
m_stickyConnList.insert(
- TssConnectionWrapper::s_geodeTSSConn->getConnDoublePtr());
+ (*TssConnectionWrapper::s_geodeTSSConn)->getConnDoublePtr());
} else {
currentConn->setAndGetBeingUsed(
false,
@@ -111,7 +111,7 @@ void ThinClientStickyManager::setStickyConnection(TcrConnection* conn,
void ThinClientStickyManager::setSingleHopStickyConnection(
TcrEndpoint* ep, TcrConnection*& conn) {
- TssConnectionWrapper::s_geodeTSSConn->setSHConnection(ep, conn);
+ (*TssConnectionWrapper::s_geodeTSSConn)->setSHConnection(ep, conn);
}
void ThinClientStickyManager::cleanStaleStickyConnection() {
@@ -188,11 +188,11 @@ bool ThinClientStickyManager::canThisConnBeDeleted(TcrConnection* conn) {
return canBeDeleted;
}
void ThinClientStickyManager::releaseThreadLocalConnection() {
- TcrConnection* conn = TssConnectionWrapper::s_geodeTSSConn->getConnection();
+ TcrConnection* conn = (*TssConnectionWrapper::s_geodeTSSConn)->getConnection();
if (conn) {
ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_stickyLock);
std::set<TcrConnection**>::iterator it = m_stickyConnList.find(
- TssConnectionWrapper::s_geodeTSSConn->getConnDoublePtr());
+ (*TssConnectionWrapper::s_geodeTSSConn)->getConnDoublePtr());
LOGDEBUG("ThinClientStickyManager::releaseThreadLocalConnection()");
if (it != m_stickyConnList.end()) {
m_stickyConnList.erase(it);
@@ -200,10 +200,10 @@ void ThinClientStickyManager::releaseThreadLocalConnection() {
false); // now this can be used by next one
m_dm->put(conn, false);
}
- TssConnectionWrapper::s_geodeTSSConn->setConnection(
+ (*TssConnectionWrapper::s_geodeTSSConn)->setConnection(
NULL, m_dm->shared_from_this());
}
- TssConnectionWrapper::s_geodeTSSConn->releaseSHConnections(
+ (*TssConnectionWrapper::s_geodeTSSConn)->releaseSHConnections(
m_dm->shared_from_this());
}
bool ThinClientStickyManager::isNULL(TcrConnection** conn) {
@@ -213,5 +213,5 @@ bool ThinClientStickyManager::isNULL(TcrConnection** conn) {
void ThinClientStickyManager::getAnyConnection(TcrConnection*& conn) {
conn =
- TssConnectionWrapper::s_geodeTSSConn->getAnyConnection(m_dm->getName());
+ (*TssConnectionWrapper::s_geodeTSSConn)->getAnyConnection(m_dm->getName());
}
http://git-wip-us.apache.org/repos/asf/geode-native/blob/767033e5/src/cppcache/src/TssConnectionWrapper.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/TssConnectionWrapper.cpp b/src/cppcache/src/TssConnectionWrapper.cpp
index a30cc3d..edf510e 100644
--- a/src/cppcache/src/TssConnectionWrapper.cpp
+++ b/src/cppcache/src/TssConnectionWrapper.cpp
@@ -18,7 +18,7 @@
#include "TcrConnection.hpp"
#include "ThinClientPoolDM.hpp"
using namespace apache::geode::client;
-ACE_TSS<TssConnectionWrapper> TssConnectionWrapper::s_geodeTSSConn;
+ACE_TSS<TssConnectionWrapper>* TssConnectionWrapper::s_geodeTSSConn = new ACE_TSS<TssConnectionWrapper>();
TssConnectionWrapper::TssConnectionWrapper() {
PoolPtr p = nullptr;
m_pool = p;
http://git-wip-us.apache.org/repos/asf/geode-native/blob/767033e5/src/cppcache/src/TssConnectionWrapper.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/TssConnectionWrapper.hpp b/src/cppcache/src/TssConnectionWrapper.hpp
index e37d062..e808bde 100644
--- a/src/cppcache/src/TssConnectionWrapper.hpp
+++ b/src/cppcache/src/TssConnectionWrapper.hpp
@@ -58,7 +58,8 @@ class TssConnectionWrapper {
TssConnectionWrapper(const TssConnectionWrapper&);
public:
- static ACE_TSS<TssConnectionWrapper> s_geodeTSSConn;
+ // TODO shared_ptr - remove or refactor with global work
+ static ACE_TSS<TssConnectionWrapper>* s_geodeTSSConn;
TcrConnection* getConnection() { return m_tcrConn; }
TcrConnection* getSHConnection(TcrEndpoint* ep, const char* poolname);
void setConnection(TcrConnection* conn, const PoolPtr& pool) {