SL-10291 cleanup-mutex
parent
26fae750ba
commit
346fc435f1
|
|
@ -29,25 +29,9 @@
|
|||
|
||||
#include "llerror.h"
|
||||
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
#include "llthread.h"
|
||||
#include "llapr.h"
|
||||
#endif
|
||||
|
||||
LLRefCount::LLRefCount(const LLRefCount& other)
|
||||
: mRef(0)
|
||||
{
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
if(gAPRPoolp)
|
||||
{
|
||||
mMutexp = new LLMutex(gAPRPoolp) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
mMutexp = NULL ;
|
||||
}
|
||||
mCrashAtUnlock = FALSE ;
|
||||
#endif
|
||||
}
|
||||
|
||||
LLRefCount& LLRefCount::operator=(const LLRefCount&)
|
||||
|
|
@ -59,17 +43,6 @@ LLRefCount& LLRefCount::operator=(const LLRefCount&)
|
|||
LLRefCount::LLRefCount() :
|
||||
mRef(0)
|
||||
{
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
if(gAPRPoolp)
|
||||
{
|
||||
mMutexp = new LLMutex(gAPRPoolp) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
mMutexp = NULL ;
|
||||
}
|
||||
mCrashAtUnlock = FALSE ;
|
||||
#endif
|
||||
}
|
||||
|
||||
LLRefCount::~LLRefCount()
|
||||
|
|
@ -78,87 +51,5 @@ LLRefCount::~LLRefCount()
|
|||
{
|
||||
LL_ERRS() << "deleting non-zero reference" << LL_ENDL;
|
||||
}
|
||||
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
if(gAPRPoolp)
|
||||
{
|
||||
delete mMutexp ;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
void LLRefCount::ref() const
|
||||
{
|
||||
if(mMutexp)
|
||||
{
|
||||
if(mMutexp->isLocked())
|
||||
{
|
||||
mCrashAtUnlock = TRUE ;
|
||||
LL_ERRS() << "the mutex is locked by the thread: " << mLockedThreadID
|
||||
<< " Current thread: " << LLThread::currentID() << LL_ENDL ;
|
||||
}
|
||||
|
||||
mMutexp->lock() ;
|
||||
mLockedThreadID = LLThread::currentID() ;
|
||||
|
||||
mRef++;
|
||||
|
||||
if(mCrashAtUnlock)
|
||||
{
|
||||
while(1); //crash here.
|
||||
}
|
||||
mMutexp->unlock() ;
|
||||
}
|
||||
else
|
||||
{
|
||||
mRef++;
|
||||
}
|
||||
}
|
||||
|
||||
S32 LLRefCount::unref() const
|
||||
{
|
||||
if(mMutexp)
|
||||
{
|
||||
if(mMutexp->isLocked())
|
||||
{
|
||||
mCrashAtUnlock = TRUE ;
|
||||
LL_ERRS() << "the mutex is locked by the thread: " << mLockedThreadID
|
||||
<< " Current thread: " << LLThread::currentID() << LL_ENDL ;
|
||||
}
|
||||
|
||||
mMutexp->lock() ;
|
||||
mLockedThreadID = LLThread::currentID() ;
|
||||
|
||||
llassert(mRef >= 1);
|
||||
if (0 == --mRef)
|
||||
{
|
||||
if(mCrashAtUnlock)
|
||||
{
|
||||
while(1); //crash here.
|
||||
}
|
||||
mMutexp->unlock() ;
|
||||
|
||||
delete this;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(mCrashAtUnlock)
|
||||
{
|
||||
while(1); //crash here.
|
||||
}
|
||||
mMutexp->unlock() ;
|
||||
return mRef;
|
||||
}
|
||||
else
|
||||
{
|
||||
llassert(mRef >= 1);
|
||||
if (0 == --mRef)
|
||||
{
|
||||
delete this;
|
||||
return 0;
|
||||
}
|
||||
return mRef;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -31,11 +31,6 @@
|
|||
#include "llmutex.h"
|
||||
#include "llapr.h"
|
||||
|
||||
#define LL_REF_COUNT_DEBUG 0
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
class LLMutex ;
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// RefCount objects should generally only be accessed by way of LLPointer<>'s
|
||||
// see llthread.h for LLThreadSafeRefCount
|
||||
|
|
@ -51,10 +46,6 @@ protected:
|
|||
public:
|
||||
LLRefCount();
|
||||
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
void ref() const ;
|
||||
S32 unref() const ;
|
||||
#else
|
||||
inline void ref() const
|
||||
{
|
||||
mRef++;
|
||||
|
|
@ -69,8 +60,7 @@ public:
|
|||
return 0;
|
||||
}
|
||||
return mRef;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//NOTE: when passing around a const LLRefCount object, this can return different results
|
||||
// at different types, since mRef is mutable
|
||||
|
|
@ -81,12 +71,6 @@ public:
|
|||
|
||||
private:
|
||||
mutable S32 mRef;
|
||||
|
||||
#if LL_REF_COUNT_DEBUG
|
||||
LLMutex* mMutexp ;
|
||||
mutable U32 mLockedThreadID ;
|
||||
mutable BOOL mCrashAtUnlock ;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -54,11 +54,7 @@
|
|||
|
||||
// constants for poll timeout. if we are threading, we want to have a
|
||||
// longer poll timeout.
|
||||
#if LL_THREADS_APR
|
||||
static const S32 DEFAULT_POLL_TIMEOUT = 1000;
|
||||
#else
|
||||
static const S32 DEFAULT_POLL_TIMEOUT = 0;
|
||||
#endif
|
||||
|
||||
// The default (and fallback) expiration time for chains
|
||||
const F32 DEFAULT_CHAIN_EXPIRY_SECS = 30.0f;
|
||||
|
|
@ -169,8 +165,6 @@ LLPumpIO::LLPumpIO(apr_pool_t* pool) :
|
|||
mPool(NULL),
|
||||
mCurrentPool(NULL),
|
||||
mCurrentPoolReallocCount(0),
|
||||
mChainsMutex(NULL),
|
||||
mCallbackMutex(NULL),
|
||||
mCurrentChain(mRunningChains.end())
|
||||
{
|
||||
mCurrentChain = mRunningChains.end();
|
||||
|
|
@ -194,9 +188,6 @@ bool LLPumpIO::addChain(const chain_t& chain, F32 timeout, bool has_curl_request
|
|||
{
|
||||
if(chain.empty()) return false;
|
||||
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mChainsMutex);
|
||||
#endif
|
||||
LLChainInfo info;
|
||||
info.mHasCurlRequest = has_curl_request;
|
||||
info.setTimeoutSeconds(timeout);
|
||||
|
|
@ -234,9 +225,6 @@ bool LLPumpIO::addChain(
|
|||
if(!data) return false;
|
||||
if(links.empty()) return false;
|
||||
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mChainsMutex);
|
||||
#endif
|
||||
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
|
||||
LL_DEBUGS() << "LLPumpIO::addChain() " << links[0].mPipe << " '"
|
||||
<< typeid(*(links[0].mPipe)).name() << "'" << LL_ENDL;
|
||||
|
|
@ -391,9 +379,6 @@ void LLPumpIO::clearLock(S32 key)
|
|||
// therefore won't be treading into deleted memory. I think we can
|
||||
// also clear the lock on the chain safely since the pump only
|
||||
// reads that value.
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mChainsMutex);
|
||||
#endif
|
||||
mClearLocks.insert(key);
|
||||
}
|
||||
|
||||
|
|
@ -457,9 +442,6 @@ void LLPumpIO::pump(const S32& poll_timeout)
|
|||
PUMP_DEBUG;
|
||||
if(true)
|
||||
{
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mChainsMutex);
|
||||
#endif
|
||||
// bail if this pump is paused.
|
||||
if(PAUSING == mState)
|
||||
{
|
||||
|
|
@ -724,25 +706,10 @@ void LLPumpIO::pump(const S32& poll_timeout)
|
|||
END_PUMP_DEBUG;
|
||||
}
|
||||
|
||||
//bool LLPumpIO::respond(const chain_t& pipes)
|
||||
//{
|
||||
//#if LL_THREADS_APR
|
||||
// LLScopedLock lock(mCallbackMutex);
|
||||
//#endif
|
||||
// LLChainInfo info;
|
||||
// links_t links;
|
||||
//
|
||||
// mPendingCallbacks.push_back(info);
|
||||
// return true;
|
||||
//}
|
||||
|
||||
bool LLPumpIO::respond(LLIOPipe* pipe)
|
||||
{
|
||||
if(NULL == pipe) return false;
|
||||
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mCallbackMutex);
|
||||
#endif
|
||||
LLChainInfo info;
|
||||
LLLinkInfo link;
|
||||
link.mPipe = pipe;
|
||||
|
|
@ -761,10 +728,6 @@ bool LLPumpIO::respond(
|
|||
if(!data) return false;
|
||||
if(links.empty()) return false;
|
||||
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mCallbackMutex);
|
||||
#endif
|
||||
|
||||
// Add the callback response
|
||||
LLChainInfo info;
|
||||
info.mChainLinks = links;
|
||||
|
|
@ -781,9 +744,6 @@ void LLPumpIO::callback()
|
|||
//LL_INFOS() << "LLPumpIO::callback()" << LL_ENDL;
|
||||
if(true)
|
||||
{
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mCallbackMutex);
|
||||
#endif
|
||||
std::copy(
|
||||
mPendingCallbacks.begin(),
|
||||
mPendingCallbacks.end(),
|
||||
|
|
@ -809,9 +769,6 @@ void LLPumpIO::callback()
|
|||
|
||||
void LLPumpIO::control(LLPumpIO::EControl op)
|
||||
{
|
||||
#if LL_THREADS_APR
|
||||
LLScopedLock lock(mChainsMutex);
|
||||
#endif
|
||||
switch(op)
|
||||
{
|
||||
case PAUSE:
|
||||
|
|
@ -829,22 +786,11 @@ void LLPumpIO::control(LLPumpIO::EControl op)
|
|||
void LLPumpIO::initialize(apr_pool_t* pool)
|
||||
{
|
||||
if(!pool) return;
|
||||
#if LL_THREADS_APR
|
||||
// SJB: Windows defaults to NESTED and OSX defaults to UNNESTED, so use UNNESTED explicitly.
|
||||
apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, pool);
|
||||
apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, pool);
|
||||
#endif
|
||||
mPool = pool;
|
||||
}
|
||||
|
||||
void LLPumpIO::cleanup()
|
||||
{
|
||||
#if LL_THREADS_APR
|
||||
if(mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
|
||||
if(mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
|
||||
#endif
|
||||
mChainsMutex = NULL;
|
||||
mCallbackMutex = NULL;
|
||||
if(mPollset)
|
||||
{
|
||||
// LL_DEBUGS() << "cleaning up pollset" << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -40,9 +40,6 @@
|
|||
#include "lliopipe.h"
|
||||
#include "llrun.h"
|
||||
|
||||
// Define this to enable use with the APR thread library.
|
||||
//#define LL_THREADS_APR 1
|
||||
|
||||
// some simple constants to help with timeouts
|
||||
extern const F32 DEFAULT_CHAIN_EXPIRY_SECS;
|
||||
extern const F32 SHORT_CHAIN_EXPIRY_SECS;
|
||||
|
|
@ -393,14 +390,6 @@ protected:
|
|||
apr_pool_t* mCurrentPool;
|
||||
S32 mCurrentPoolReallocCount;
|
||||
|
||||
#if LL_THREADS_APR
|
||||
apr_thread_mutex_t* mChainsMutex;
|
||||
apr_thread_mutex_t* mCallbackMutex;
|
||||
#else
|
||||
int* mChainsMutex;
|
||||
int* mCallbackMutex;
|
||||
#endif
|
||||
|
||||
protected:
|
||||
void initialize(apr_pool_t* pool);
|
||||
void cleanup();
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
#include <map>
|
||||
#include <set>
|
||||
|
||||
#include "llapr.h"
|
||||
#include "llpointer.h"
|
||||
#include "llqueuedthread.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@
|
|||
#include <map>
|
||||
#include <set>
|
||||
|
||||
#include "llapr.h"
|
||||
|
||||
#include "llqueuedthread.h"
|
||||
|
||||
#include "llvfs.h"
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
#include "lluuid.h"
|
||||
#include "llworkerthread.h"
|
||||
#include "lltextureinfo.h"
|
||||
#include "llapr.h"
|
||||
#include "llimageworker.h"
|
||||
#include "httprequest.h"
|
||||
#include "httpoptions.h"
|
||||
|
|
|
|||
Loading…
Reference in New Issue