Automated merge with http://bitbucket.org/simon_linden/viewmaster
commit
e496796afb
|
|
@ -548,6 +548,7 @@ LLCurl::Multi::Multi(F32 idle_time_out)
|
|||
mErrorCount(0),
|
||||
mState(STATE_READY),
|
||||
mDead(FALSE),
|
||||
mValid(TRUE),
|
||||
mMutexp(NULL),
|
||||
mDeletionMutexp(NULL),
|
||||
mEasyMutexp(NULL)
|
||||
|
|
@ -584,6 +585,9 @@ LLCurl::Multi::Multi(F32 idle_time_out)
|
|||
LLCurl::Multi::~Multi()
|
||||
{
|
||||
cleanup(true) ;
|
||||
|
||||
delete mDeletionMutexp ;
|
||||
mDeletionMutexp = NULL ;
|
||||
}
|
||||
|
||||
void LLCurl::Multi::cleanup(bool deleted)
|
||||
|
|
@ -592,7 +596,10 @@ void LLCurl::Multi::cleanup(bool deleted)
|
|||
{
|
||||
return ; //nothing to clean.
|
||||
}
|
||||
llassert_always(deleted || !mValid) ;
|
||||
|
||||
LLMutexLock lock(mDeletionMutexp);
|
||||
|
||||
// Clean up active
|
||||
for(easy_active_list_t::iterator iter = mEasyActiveList.begin();
|
||||
iter != mEasyActiveList.end(); ++iter)
|
||||
|
|
@ -615,14 +622,12 @@ void LLCurl::Multi::cleanup(bool deleted)
|
|||
|
||||
check_curl_multi_code(LLCurl::deleteMultiHandle(mCurlMultiHandle));
|
||||
mCurlMultiHandle = NULL ;
|
||||
|
||||
|
||||
delete mMutexp ;
|
||||
mMutexp = NULL ;
|
||||
delete mDeletionMutexp ;
|
||||
mDeletionMutexp = NULL ;
|
||||
delete mEasyMutexp ;
|
||||
mEasyMutexp = NULL ;
|
||||
|
||||
|
||||
mQueued = 0 ;
|
||||
mState = STATE_COMPLETED;
|
||||
|
||||
|
|
@ -649,10 +654,20 @@ void LLCurl::Multi::unlock()
|
|||
|
||||
void LLCurl::Multi::markDead()
|
||||
{
|
||||
LLMutexLock lock(mDeletionMutexp) ;
|
||||
{
|
||||
LLMutexLock lock(mDeletionMutexp) ;
|
||||
|
||||
mDead = TRUE ;
|
||||
LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_URGENT) ;
|
||||
if(mCurlMultiHandle != NULL)
|
||||
{
|
||||
mDead = TRUE ;
|
||||
LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_URGENT) ;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//not valid, delete it.
|
||||
delete this;
|
||||
}
|
||||
|
||||
void LLCurl::Multi::setState(LLCurl::Multi::ePerformState state)
|
||||
|
|
@ -746,10 +761,14 @@ bool LLCurl::Multi::doPerform()
|
|||
setState(STATE_COMPLETED) ;
|
||||
mIdleTimer.reset() ;
|
||||
}
|
||||
else if(mIdleTimer.getElapsedTimeF32() > mIdleTimeOut) //idle for too long, remove it.
|
||||
else if(!mValid && mIdleTimer.getElapsedTimeF32() > mIdleTimeOut) //idle for too long, remove it.
|
||||
{
|
||||
dead = true ;
|
||||
}
|
||||
else if(mValid && mIdleTimer.getElapsedTimeF32() > mIdleTimeOut - 1.f) //idle for too long, mark it invalid.
|
||||
{
|
||||
mValid = FALSE ;
|
||||
}
|
||||
|
||||
return dead ;
|
||||
}
|
||||
|
|
@ -971,14 +990,7 @@ void LLCurlThread::killMulti(LLCurl::Multi* multi)
|
|||
return ;
|
||||
}
|
||||
|
||||
if(multi->isValid())
|
||||
{
|
||||
multi->markDead() ;
|
||||
}
|
||||
else
|
||||
{
|
||||
deleteMulti(multi) ;
|
||||
}
|
||||
multi->markDead() ;
|
||||
}
|
||||
|
||||
//private
|
||||
|
|
@ -997,6 +1009,10 @@ void LLCurlThread::deleteMulti(LLCurl::Multi* multi)
|
|||
void LLCurlThread::cleanupMulti(LLCurl::Multi* multi)
|
||||
{
|
||||
multi->cleanup() ;
|
||||
if(multi->isDead()) //check if marked dead during cleaning up.
|
||||
{
|
||||
deleteMulti(multi) ;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ public:
|
|||
ePerformState getState() ;
|
||||
|
||||
bool isCompleted() ;
|
||||
bool isValid() {return mCurlMultiHandle != NULL ;}
|
||||
bool isValid() {return mCurlMultiHandle != NULL && mValid;}
|
||||
bool isDead() {return mDead;}
|
||||
|
||||
bool waitToComplete() ;
|
||||
|
|
@ -333,6 +333,7 @@ private:
|
|||
ePerformState mState;
|
||||
|
||||
BOOL mDead ;
|
||||
BOOL mValid ;
|
||||
LLMutex* mMutexp ;
|
||||
LLMutex* mDeletionMutexp ;
|
||||
LLMutex* mEasyMutexp ;
|
||||
|
|
|
|||
|
|
@ -839,7 +839,6 @@ void LLWorld::updateWaterObjects()
|
|||
|
||||
// Now, get a list of the holes
|
||||
S32 x, y;
|
||||
F32 water_height = gAgent.getRegion()->getWaterHeight() + 256.f;
|
||||
for (x = min_x; x <= max_x; x += rwidth)
|
||||
{
|
||||
for (y = min_y; y <= max_y; y += rwidth)
|
||||
|
|
@ -851,7 +850,7 @@ void LLWorld::updateWaterObjects()
|
|||
waterp->setUseTexture(FALSE);
|
||||
waterp->setPositionGlobal(LLVector3d(x + rwidth/2,
|
||||
y + rwidth/2,
|
||||
water_height));
|
||||
256.f+DEFAULT_WATER_HEIGHT));
|
||||
waterp->setScale(LLVector3((F32)rwidth, (F32)rwidth, 512.f));
|
||||
gPipeline.createObject(waterp);
|
||||
mHoleWaterObjects.push_back(waterp);
|
||||
|
|
@ -908,7 +907,7 @@ void LLWorld::updateWaterObjects()
|
|||
}
|
||||
|
||||
waterp->setRegion(gAgent.getRegion());
|
||||
LLVector3d water_pos(water_center_x, water_center_y, water_height) ;
|
||||
LLVector3d water_pos(water_center_x, water_center_y, 256.f+DEFAULT_WATER_HEIGHT) ;
|
||||
LLVector3 water_scale((F32) dim[0], (F32) dim[1], 512.f);
|
||||
|
||||
//stretch out to horizon
|
||||
|
|
|
|||
Loading…
Reference in New Issue