diff options
author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-12-02 17:06:08 -0500 |
---|---|---|
committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-12-02 17:06:08 -0500 |
commit | d529abbfe62c879e4c0e6397e55cc80030b735b8 (patch) | |
tree | 192c9f41686a8f6c32626b6b514978ae29a02b02 /indra/llcommon/llthread.cpp | |
parent | f0bca5f0683db1540b640191ab2780224aceb800 (diff) | |
parent | 680328dd78e1d31a2f8836919a0f6140a76af5f4 (diff) |
merge
Diffstat (limited to 'indra/llcommon/llthread.cpp')
-rw-r--r-- | indra/llcommon/llthread.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 84da54f26d..f0b7ac5def 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -78,9 +78,6 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap { LLThread *threadp = (LLThread *)datap; - // Set thread state to running - threadp->mStatus = RUNNING; - #if !LL_DARWIN sThreadID = threadp->mID; #endif @@ -168,26 +165,45 @@ void LLThread::shutdown() { // This thread just wouldn't stop, even though we gave it time //llwarns << "LLThread::~LLThread() exiting thread before clean exit!" << llendl; + // Put a stake in its heart. + apr_thread_exit(mAPRThreadp, -1); return; } mAPRThreadp = NULL; } delete mRunCondition; + mRunCondition = 0; - if (mIsLocalPool) + if (mIsLocalPool && mAPRPoolp) { apr_pool_destroy(mAPRPoolp); + mAPRPoolp = 0; } } void LLThread::start() { - apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp); + llassert(isStopped()); + + // Set thread state to running + mStatus = RUNNING; - // We won't bother joining - apr_thread_detach(mAPRThreadp); + apr_status_t status = + apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp); + + if(status == APR_SUCCESS) + { + // We won't bother joining + apr_thread_detach(mAPRThreadp); + } + else + { + mStatus = STOPPED; + llwarns << "failed to start thread " << mName << llendl; + ll_apr_warn_status(status); + } } //============================================================================ |