pull back 3.4.1-beta6 fixes

master
Oz Linden 2012-10-10 21:40:10 -04:00
commit 1709952adb
27 changed files with 222 additions and 172 deletions

12
.hgtags
View File

@ -69,6 +69,7 @@ b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release
4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start
9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1
9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1
461c8c65b5c799ddfe365422f9be9c0095d91e7d 2.6.0-beta1-tip
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
@ -318,5 +319,14 @@ ceed0b65a69f1eac20d523e0203320a32f9a3f3c DRTVWR-215
97977c67245f52db20eb15f1918cc0f24778cabc 3.4.0-release
5adb2b8f96c3cac88ad7c7d996d707f1b29df336 3.4.1-beta1
b3f74858a1c8720c82d0978f3877a3fc8ba459ec 3.4.1-beta1a
45028c687415ae2d6ca0c13fefca62cba60e013f DRTVWR-179
b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219
2b779f233ee6f38c89cb921650c773a96e63da92 DRTVWR-220
0b9d95f4bfb6867cbf56eaec51633b0da2f1262d DRTVWR-221
e6e553761829dc0270eaaa712b7cb0622535b076 3.4.1-beta3
f00068a66a2e2f72acbe3f690b98b323e740b289 DRTVWR-222
305950187c628a5d6743ee9ea711cc5b9177a18e 3.4.1-beta4
dd23d4da3bcb2ffda58569e759feb7c119982973 DRTVWR-224
0bd3744ff060452aa13ff4992eafb381df7b1012 3.4.1-beta5
29075f8c1abed53dcf195a59f61744e27a91108f DRTVWR-226
fba99f381b8d4ad1b7b42fa4993b29998d95be18 DRTVWR-179
49ed253c80bed7410e238eeab35a9f14cb034364 3.4.1-beta6

View File

@ -1770,9 +1770,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>dde928cb24d22a267004a8c17669ba65</string>
<string>8aedfdcf670348c18a9991ae1b384a61</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226426/arch/Linux/installer/google_perftools-1.7-linux-20110412.tar.bz2</string>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@ -1782,9 +1782,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>8308f7bd68bb7083655753b7abe7225f</string>
<string>f62841804acb91e1309603a84f3f0ce8</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226287/arch/CYGWIN/installer/google_perftools-1.7-windows-20110411.tar.bz2</string>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>

View File

@ -289,6 +289,7 @@ void LLApp::setupErrorHandling()
// occasionally checks to see if the app is in an error state, and sees if it needs to be run.
#if LL_WINDOWS
#if LL_SEND_CRASH_REPORTS
// This sets a callback to handle w32 signals to the console window.
// The viewer shouldn't be affected, sicne its a windowed app.
SetConsoleCtrlHandler( (PHANDLER_ROUTINE) ConsoleCtrlHandler, TRUE);
@ -300,7 +301,7 @@ void LLApp::setupErrorHandling()
mExceptionHandler = new google_breakpad::ExceptionHandler(
L"C:\\Temp\\", 0, windows_post_minidump_callback, 0, google_breakpad::ExceptionHandler::HANDLER_ALL);
}
#endif
#else
//
// Start up signal handling.

View File

@ -27,6 +27,13 @@
#define LLMEMORY_H
#include "llmemtype.h"
#if LL_WINDOWS && LL_DEBUG
#define LL_CHECK_MEMORY llassert(_CrtCheckMemory());
#else
#define LL_CHECK_MEMORY
#endif
inline void* ll_aligned_malloc( size_t size, int align )
{
void* mem = malloc( size + (align - 1) + sizeof(void*) );
@ -90,7 +97,7 @@ inline void* ll_aligned_realloc_16(void* ptr, size_t size, size_t old_size) // r
#else // USE_TCMALLOC
// ll_aligned_foo_16 are not needed with tcmalloc
#define ll_aligned_malloc_16 malloc
#define ll_aligned_realloc_16 realloc
#define ll_aligned_realloc_16(a,b,c) realloc(a,b)
#define ll_aligned_free_16 free
#endif // USE_TCMALLOC

View File

@ -134,8 +134,8 @@ S32 LLQueuedThread::updateQueue(F32 max_time_ms)
pending = getPending();
if(pending > 0)
{
unpause();
}
unpause();
}
}
else
{

View File

@ -114,7 +114,7 @@ LLThread::LLThread(const std::string& name, apr_pool_t *poolp) :
apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread
}
mRunCondition = new LLCondition(mAPRPoolp);
mDataLock = new LLMutex(mAPRPoolp);
mLocalAPRFilePoolp = NULL ;
}
@ -173,7 +173,10 @@ void LLThread::shutdown()
}
delete mRunCondition;
mRunCondition = 0;
mRunCondition = NULL;
delete mDataLock;
mDataLock = NULL;
if (mIsLocalPool && mAPRPoolp)
{
@ -242,28 +245,30 @@ bool LLThread::runCondition(void)
// Stop thread execution if requested until unpaused.
void LLThread::checkPause()
{
mRunCondition->lock();
mDataLock->lock();
// This is in a while loop because the pthread API allows for spurious wakeups.
while(shouldSleep())
{
mDataLock->unlock();
mRunCondition->wait(); // unlocks mRunCondition
mDataLock->lock();
// mRunCondition is locked when the thread wakes up
}
mRunCondition->unlock();
mDataLock->unlock();
}
//============================================================================
void LLThread::setQuitting()
{
mRunCondition->lock();
mDataLock->lock();
if (mStatus == RUNNING)
{
mStatus = QUITTING;
}
mRunCondition->unlock();
mDataLock->unlock();
wake();
}
@ -285,12 +290,12 @@ void LLThread::yield()
void LLThread::wake()
{
mRunCondition->lock();
mDataLock->lock();
if(!shouldSleep())
{
mRunCondition->signal();
}
mRunCondition->unlock();
mDataLock->unlock();
}
void LLThread::wakeLocked()
@ -481,6 +486,19 @@ LLThreadSafeRefCount::LLThreadSafeRefCount() :
{
}
LLThreadSafeRefCount::LLThreadSafeRefCount(const LLThreadSafeRefCount& src)
{
if (sMutex)
{
sMutex->lock();
}
mRef = 0;
if (sMutex)
{
sMutex->unlock();
}
}
LLThreadSafeRefCount::~LLThreadSafeRefCount()
{
if (mRef != 0)
@ -489,6 +507,7 @@ LLThreadSafeRefCount::~LLThreadSafeRefCount()
}
}
//============================================================================
LLResponder::~LLResponder()

View File

@ -97,6 +97,7 @@ private:
protected:
std::string mName;
LLCondition* mRunCondition;
LLMutex* mDataLock;
apr_thread_t *mAPRThreadp;
apr_pool_t *mAPRPoolp;
@ -122,15 +123,15 @@ protected:
inline void unlockData();
// This is the predicate that decides whether the thread should sleep.
// It should only be called with mRunCondition locked, since the virtual runCondition() function may need to access
// It should only be called with mDataLock locked, since the virtual runCondition() function may need to access
// data structures that are thread-unsafe.
bool shouldSleep(void) { return (mStatus == RUNNING) && (isPaused() || (!runCondition())); }
// To avoid spurious signals (and the associated context switches) when the condition may or may not have changed, you can do the following:
// mRunCondition->lock();
// mDataLock->lock();
// if(!shouldSleep())
// mRunCondition->signal();
// mRunCondition->unlock();
// mDataLock->unlock();
};
//============================================================================
@ -205,12 +206,12 @@ private:
void LLThread::lockData()
{
mRunCondition->lock();
mDataLock->lock();
}
void LLThread::unlockData()
{
mRunCondition->unlock();
mDataLock->unlock();
}
@ -227,15 +228,27 @@ public:
private:
static LLMutex* sMutex;
private:
LLThreadSafeRefCount(const LLThreadSafeRefCount&); // not implemented
LLThreadSafeRefCount&operator=(const LLThreadSafeRefCount&); // not implemented
protected:
virtual ~LLThreadSafeRefCount(); // use unref()
public:
LLThreadSafeRefCount();
LLThreadSafeRefCount(const LLThreadSafeRefCount&);
LLThreadSafeRefCount& operator=(const LLThreadSafeRefCount& ref)
{
if (sMutex)
{
sMutex->lock();
}
mRef = 0;
if (sMutex)
{
sMutex->unlock();
}
return *this;
}
void ref()
{

View File

@ -133,12 +133,12 @@ std::string LLCurl::getVersionString()
//////////////////////////////////////////////////////////////////////////////
LLCurl::Responder::Responder()
: mReferenceCount(0)
{
}
LLCurl::Responder::~Responder()
{
LL_CHECK_MEMORY
}
// virtual
@ -202,23 +202,6 @@ void LLCurl::Responder::completedHeader(U32 status, const std::string& reason, c
}
namespace boost
{
void intrusive_ptr_add_ref(LLCurl::Responder* p)
{
++p->mReferenceCount;
}
void intrusive_ptr_release(LLCurl::Responder* p)
{
if (p && 0 == --p->mReferenceCount)
{
delete p;
}
}
};
//////////////////////////////////////////////////////////////////////////////
std::set<CURL*> LLCurl::Easy::sFreeHandles;
@ -267,15 +250,18 @@ void LLCurl::Easy::releaseEasyHandle(CURL* handle)
LLMutexLock lock(sHandleMutexp) ;
if (sActiveHandles.find(handle) != sActiveHandles.end())
{
LL_CHECK_MEMORY
sActiveHandles.erase(handle);
LL_CHECK_MEMORY
if(sFreeHandles.size() < MAX_NUM_FREE_HANDLES)
{
sFreeHandles.insert(handle);
}
else
{
sFreeHandles.insert(handle);
LL_CHECK_MEMORY
}
else
{
LLCurl::deleteEasyHandle(handle) ;
LL_CHECK_MEMORY
}
}
else
@ -318,13 +304,15 @@ LLCurl::Easy::~Easy()
releaseEasyHandle(mCurlEasyHandle);
--gCurlEasyCount;
curl_slist_free_all(mHeaders);
LL_CHECK_MEMORY
for_each(mStrings.begin(), mStrings.end(), DeletePointerArray());
LL_CHECK_MEMORY
if (mResponder && LLCurl::sNotQuitting) //aborted
{
std::string reason("Request timeout, aborted.") ;
mResponder->completedRaw(408, //HTTP_REQUEST_TIME_OUT, timeout, abort
reason, mChannels, mOutput);
LL_CHECK_MEMORY
}
mResponder = NULL;
}
@ -599,35 +587,50 @@ void LLCurl::Multi::cleanup(bool deleted)
llassert_always(deleted || !mValid) ;
LLMutexLock lock(mDeletionMutexp);
// Clean up active
for(easy_active_list_t::iterator iter = mEasyActiveList.begin();
iter != mEasyActiveList.end(); ++iter)
{
Easy* easy = *iter;
LL_CHECK_MEMORY
check_curl_multi_code(curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle()));
LL_CHECK_MEMORY
if(deleted)
{
easy->mResponder = NULL ; //avoid triggering mResponder.
LL_CHECK_MEMORY
}
delete easy;
LL_CHECK_MEMORY
}
mEasyActiveList.clear();
mEasyActiveMap.clear();
// Clean up freed
LL_CHECK_MEMORY
// Clean up freed
for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer());
mEasyFreeList.clear();
LL_CHECK_MEMORY
check_curl_multi_code(LLCurl::deleteMultiHandle(mCurlMultiHandle));
mCurlMultiHandle = NULL ;
LL_CHECK_MEMORY
delete mMutexp ;
mMutexp = NULL ;
LL_CHECK_MEMORY
delete mEasyMutexp ;
mEasyMutexp = NULL ;
LL_CHECK_MEMORY
mQueued = 0 ;
mState = STATE_COMPLETED;
@ -1104,6 +1107,7 @@ bool LLCurlRequest::getByteRange(const std::string& url,
S32 offset, S32 length,
LLCurl::ResponderPtr responder)
{
llassert(LLCurl::sNotQuitting);
LLCurl::Easy* easy = allocEasy();
if (!easy)
{
@ -1131,6 +1135,7 @@ bool LLCurlRequest::post(const std::string& url,
const LLSD& data,
LLCurl::ResponderPtr responder, S32 time_out)
{
llassert(LLCurl::sNotQuitting);
LLCurl::Easy* easy = allocEasy();
if (!easy)
{
@ -1158,6 +1163,7 @@ bool LLCurlRequest::post(const std::string& url,
const std::string& data,
LLCurl::ResponderPtr responder, S32 time_out)
{
llassert(LLCurl::sNotQuitting);
LLCurl::Easy* easy = allocEasy();
if (!easy)
{
@ -1714,29 +1720,42 @@ void LLCurl::cleanupClass()
break ;
}
}
LL_CHECK_MEMORY
sCurlThread->shutdown() ;
LL_CHECK_MEMORY
delete sCurlThread ;
sCurlThread = NULL ;
LL_CHECK_MEMORY
#if SAFE_SSL
CRYPTO_set_locking_callback(NULL);
for_each(sSSLMutex.begin(), sSSLMutex.end(), DeletePointer());
#endif
LL_CHECK_MEMORY
for (std::set<CURL*>::iterator iter = Easy::sFreeHandles.begin(); iter != Easy::sFreeHandles.end(); ++iter)
{
CURL* curl = *iter;
LLCurl::deleteEasyHandle(curl);
}
LL_CHECK_MEMORY
Easy::sFreeHandles.clear();
LL_CHECK_MEMORY
delete Easy::sHandleMutexp ;
Easy::sHandleMutexp = NULL ;
LL_CHECK_MEMORY
delete sHandleMutexp ;
sHandleMutexp = NULL ;
LL_CHECK_MEMORY
// removed as per https://jira.secondlife.com/browse/SH-3115
//llassert(Easy::sActiveHandles.empty());
}
@ -1744,6 +1763,8 @@ void LLCurl::cleanupClass()
//static
CURLM* LLCurl::newMultiHandle()
{
llassert(sNotQuitting);
LLMutexLock lock(sHandleMutexp) ;
if(sTotalHandles + 1 > sMaxHandles)
@ -1777,6 +1798,7 @@ CURLMcode LLCurl::deleteMultiHandle(CURLM* handle)
//static
CURL* LLCurl::newEasyHandle()
{
llassert(sNotQuitting);
LLMutexLock lock(sHandleMutexp) ;
if(sTotalHandles + 1 > sMaxHandles)
@ -1801,7 +1823,9 @@ void LLCurl::deleteEasyHandle(CURL* handle)
if(handle)
{
LLMutexLock lock(sHandleMutexp) ;
LL_CHECK_MEMORY
curl_easy_cleanup(handle) ;
LL_CHECK_MEMORY
sTotalHandles-- ;
}
}

View File

@ -44,6 +44,8 @@
#include "llthread.h"
#include "llqueuedthread.h"
#include "llframetimer.h"
#include "llpointer.h"
class LLMutex;
class LLCurlThread;
@ -67,7 +69,7 @@ public:
F64 mSpeedDownload;
};
class Responder
class Responder : public LLThreadSafeRefCount
{
//LOG_CLASS(Responder);
public:
@ -126,13 +128,10 @@ public:
return false;
}
public: /* but not really -- don't touch this */
U32 mReferenceCount;
private:
std::string mURL;
};
typedef boost::intrusive_ptr<Responder> ResponderPtr;
typedef LLPointer<Responder> ResponderPtr;
/**
@ -378,12 +377,6 @@ private:
void cleanupMulti(LLCurl::Multi* multi) ;
} ;
namespace boost
{
void intrusive_ptr_add_ref(LLCurl::Responder* p);
void intrusive_ptr_release(LLCurl::Responder* p);
};
class LLCurlRequest
{

View File

@ -28,7 +28,6 @@
#include "llcurl.h"
LLCurl::Responder::Responder()
: mReferenceCount(0)
{
}
@ -77,19 +76,3 @@ void LLCurl::Responder::result(LLSD const&)
{
}
namespace boost
{
void intrusive_ptr_add_ref(LLCurl::Responder* p)
{
++p->mReferenceCount;
}
void intrusive_ptr_release(LLCurl::Responder* p)
{
if(p && 0 == --p->mReferenceCount)
{
delete p;
}
}
};

View File

@ -189,9 +189,9 @@ namespace tut
}
public:
static boost::intrusive_ptr<Result> build(HTTPClientTestData& client)
static Result* build(HTTPClientTestData& client)
{
return boost::intrusive_ptr<Result>(new Result(client));
return new Result(client);
}
~Result()

View File

@ -1891,8 +1891,17 @@ bool LLAppViewer::cleanup()
sTextureFetch->shutDownTextureCacheThread() ;
sTextureFetch->shutDownImageDecodeThread() ;
llinfos << "Shutting down message system" << llendflush;
end_messaging_system();
// *NOTE:Mani - The following call is not thread safe.
LL_CHECK_MEMORY
LLCurl::cleanupClass();
LL_CHECK_MEMORY
LLFilePickerThread::cleanupClass();
//MUST happen AFTER LLCurl::cleanupClass
delete sTextureCache;
sTextureCache = NULL;
delete sTextureFetch;
@ -1961,12 +1970,6 @@ bool LLAppViewer::cleanup()
LLViewerAssetStatsFF::cleanup();
llinfos << "Shutting down message system" << llendflush;
end_messaging_system();
// *NOTE:Mani - The following call is not thread safe.
LLCurl::cleanupClass();
// If we're exiting to launch an URL, do that here so the screen
// is at the right resolution before we launch IE.
if (!gLaunchFileOnQuit.empty())

View File

@ -131,7 +131,9 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
// Note: This won't work when running from the debugger unless the _NO_DEBUG_HEAP environment variable is set to 1
// Enable to get mem debugging within visual studio.
//_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#if LL_DEBUG
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#else
_CrtSetDbgFlag(0); // default, just making explicit
ULONG ulEnableLFH = 2;
@ -145,6 +147,7 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
else
heap_enable_lfh_error[i] = GetLastError();
}
#endif
#endif
// *FIX: global

View File

@ -919,7 +919,7 @@ public:
bool uploadConfirmationCallback(
const LLSD& notification,
const LLSD& response,
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder> responder)
LLPointer<LLNewAgentInventoryVariablePriceResponder> responder)
{
S32 option;
std::string confirmation_url;
@ -949,7 +949,7 @@ public:
void confirmUpload(
const std::string& confirmation_url,
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder> responder)
LLPointer<LLNewAgentInventoryVariablePriceResponder> responder)
{
if ( getFilename().empty() )
{
@ -1124,7 +1124,7 @@ void LLNewAgentInventoryVariablePriceResponder::showConfirmationDialog(
// and cause sadness.
mImpl->confirmUpload(
confirmation_url,
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder>(this));
LLPointer<LLNewAgentInventoryVariablePriceResponder>(this));
}
else
{
@ -1157,7 +1157,7 @@ void LLNewAgentInventoryVariablePriceResponder::showConfirmationDialog(
mImpl,
_1,
_2,
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder>(this)));
LLPointer<LLNewAgentInventoryVariablePriceResponder>(this)));
}
}

View File

@ -951,6 +951,12 @@ LLSpatialGroup* LLDrawable::getSpatialGroup() const
void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)
{
//precondition: mSpatialGroupp MUST be null or DEAD or mSpatialGroupp MUST NOT contain this
llassert(!mSpatialGroupp || mSpatialGroupp->isDead() || !mSpatialGroupp->hasElement(this));
//precondition: groupp MUST be null or groupp MUST contain this
llassert(!groupp || groupp->hasElement(this));
/*if (mSpatialGroupp && (groupp != mSpatialGroupp))
{
mSpatialGroupp->setState(LLSpatialGroup::GEOM_DIRTY);
@ -970,9 +976,12 @@ void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)
}
}
mSpatialGroupp = groupp;
//postcondition: if next group is NULL, previous group must be dead OR NULL OR binIndex must be -1
//postcondition: if next group is NOT NULL, binIndex must not be -1
llassert(groupp == NULL ? (mSpatialGroupp == NULL || mSpatialGroupp->isDead()) || getBinIndex() == -1 :
getBinIndex() != -1);
llassert((mSpatialGroupp == NULL) ? getBinIndex() == -1 : getBinIndex() != -1);
mSpatialGroupp = groupp;
}
LLSpatialPartition* LLDrawable::getSpatialPartition()
@ -1400,7 +1409,7 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update)
markDead();
return;
}
if (gShiftFrame)
{
return;
@ -1483,13 +1492,11 @@ void LLSpatialBridge::cleanupReferences()
LLDrawable::cleanupReferences();
if (mDrawable)
{
LLSpatialGroup* group = mDrawable->getSpatialGroup();
if (group)
{
group->mOctreeNode->remove(mDrawable);
mDrawable->setSpatialGroup(NULL);
}
/*
DON'T DO THIS -- this should happen through octree destruction
mDrawable->setSpatialGroup(NULL);
if (mDrawable->getVObj())
{
LLViewerObject::const_child_list_t& child_list = mDrawable->getVObj()->getChildren();
@ -1500,15 +1507,10 @@ void LLSpatialBridge::cleanupReferences()
LLDrawable* drawable = child->mDrawable;
if (drawable)
{
LLSpatialGroup* group = drawable->getSpatialGroup();
if (group)
{
group->mOctreeNode->remove(drawable);
drawable->setSpatialGroup(NULL);
}
drawable->setSpatialGroup(NULL);
}
}
}
}*/
LLDrawable* drawablep = mDrawable;
mDrawable = NULL;

View File

@ -86,7 +86,7 @@ namespace
class LLEventPollEventTimer : public LLEventTimer
{
typedef boost::intrusive_ptr<LLEventPollResponder> EventPollResponderPtr;
typedef LLPointer<LLEventPollResponder> EventPollResponderPtr;
public:
LLEventPollEventTimer(F32 period, EventPollResponderPtr responder)

View File

@ -71,9 +71,9 @@ class LLIamHere : public LLHTTPClient::Responder
public:
static boost::intrusive_ptr< LLIamHere > build( LLFloaterTOS* parent )
static LLIamHere* build( LLFloaterTOS* parent )
{
return boost::intrusive_ptr< LLIamHere >( new LLIamHere( parent ) );
return new LLIamHere( parent );
};
virtual void setParent( LLFloaterTOS* parentIn )
@ -102,7 +102,7 @@ class LLIamHere : public LLHTTPClient::Responder
// this is global and not a class member to keep crud out of the header file
namespace {
boost::intrusive_ptr< LLIamHere > gResponsePtr = 0;
LLPointer< LLIamHere > gResponsePtr = 0;
};
BOOL LLFloaterTOS::postBuild()

View File

@ -1859,6 +1859,8 @@ BOOL LLSpatialPartition::remove(LLDrawable *drawablep, LLSpatialGroup *curp)
drawablep->setSpatialGroup(NULL);
}
drawablep->setSpatialGroup(NULL);
assert_octree_valid(mOctree);
return TRUE;
@ -4194,7 +4196,7 @@ public:
{
if (index < 255)
{
if (facep->mDrawInfo->mTextureList.size()<= index)
if (facep->mDrawInfo->mTextureList.size() <= index)
{
llerrs << "Face texture index out of bounds." << llendl;
}

View File

@ -350,6 +350,8 @@ public:
element_list& getData() { return mOctreeNode->getData(); }
element_iter getDataBegin() { return mOctreeNode->getDataBegin(); }
element_iter getDataEnd() { return mOctreeNode->getDataEnd(); }
bool hasElement(LLDrawable* drawablep) { return std::find(mOctreeNode->getDataBegin(), mOctreeNode->getDataEnd(), drawablep) != mOctreeNode->getDataEnd(); }
U32 getElementCount() const { return mOctreeNode->getElementCount(); }
bool isEmpty() const { return mOctreeNode->isEmpty(); }

View File

@ -2977,7 +2977,9 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
~lcl_responder()
{
LL_CHECK_MEMORY
mFetcher->decrCurlPOSTCount();
LL_CHECK_MEMORY
}
// virtual

View File

@ -263,8 +263,8 @@ public :
EService mService;
};
typedef boost::intrusive_ptr<TranslationReceiver> TranslationReceiverPtr;
typedef boost::intrusive_ptr<KeyVerificationReceiver> KeyVerificationReceiverPtr;
typedef LLPointer<TranslationReceiver> TranslationReceiverPtr;
typedef LLPointer<KeyVerificationReceiver> KeyVerificationReceiverPtr;
/**
* Translate given text.

View File

@ -3340,9 +3340,9 @@ public :
{
}
static boost::intrusive_ptr<ChatTranslationReceiver> build(const std::string &from_lang, const std::string &to_lang, const std::string &mesg, const LLChat &chat, const LLSD &toast_args)
static ChatTranslationReceiver* build(const std::string &from_lang, const std::string &to_lang, const std::string &mesg, const LLChat &chat, const LLSD &toast_args)
{
return boost::intrusive_ptr<ChatTranslationReceiver>(new ChatTranslationReceiver(from_lang, to_lang, mesg, chat, toast_args));
return new ChatTranslationReceiver(from_lang, to_lang, mesg, chat, toast_args);
}
protected:

View File

@ -255,10 +255,9 @@ public:
}
}
static boost::intrusive_ptr<BaseCapabilitiesComplete> build( U64 region_handle, S32 id )
static BaseCapabilitiesComplete* build( U64 region_handle, S32 id )
{
return boost::intrusive_ptr<BaseCapabilitiesComplete>(
new BaseCapabilitiesComplete(region_handle, id) );
return new BaseCapabilitiesComplete(region_handle, id);
}
private:

View File

@ -299,11 +299,6 @@ LLControlGroup::LLControlGroup(const std::string& name) : LLInstanceTracker<LLCo
std::string LLControlGroup::getString(const std::string& name) { return "dummy"; }
LLControlGroup::~LLControlGroup() {}
namespace boost {
void intrusive_ptr_add_ref(LLCurl::Responder*) {}
void intrusive_ptr_release(LLCurl::Responder*) {}
}
LLCurl::Responder::Responder() {}
void LLCurl::Responder::completedHeader(U32, std::string const&, LLSD const&) {}
void LLCurl::Responder::completedRaw(U32, const std::string&, const LLChannelDescriptors&, const LLIOPipe::buffer_ptr_t& buffer) {}
@ -314,7 +309,7 @@ void LLCurl::Responder::result(LLSD const&) {}
LLCurl::Responder::~Responder() {}
void LLHTTPClient::get(const std::string&, const LLSD&, ResponderPtr, const LLSD&, const F32) {}
void LLHTTPClient::get(const std::string&, boost::intrusive_ptr<LLCurl::Responder>, const LLSD&, const F32) {}
void LLHTTPClient::get(const std::string&, LLPointer<LLCurl::Responder>, const LLSD&, const F32) {}
LLBufferStream::LLBufferStream(const LLChannelDescriptors& channels, LLBufferArray* buffer)
: std::iostream(&mStreamBuf), mStreamBuf(channels, buffer) {}

View File

@ -537,6 +537,7 @@ class WindowsManifest(ViewerManifest):
result += 'File ' + pkg_file + '\n'
else:
result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
# at the end of a delete, just rmdir all the directories
if not install:
deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list]
@ -1105,9 +1106,7 @@ class Linux_i686Manifest(LinuxManifest):
# version number.
self.path("libfontconfig.so.*.*")
try:
self.path("libtcmalloc.so", "libtcmalloc.so") #formerly called google perf tools
self.path("libtcmalloc.so.0", "libtcmalloc.so.0") #formerly called google perf tools
self.path("libtcmalloc.so.0.1.0", "libtcmalloc.so.0.1.0") #formerly called google perf tools
self.path("libtcmalloc.so*") #formerly called google perf tools
pass
except:
print "tcmalloc files not found, skipping"

View File

@ -51,37 +51,6 @@ public:
};
class LLUpdateChecker::Implementation:
public LLHTTPClient::Responder
{
public:
Implementation(Client & client);
~Implementation();
void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,
std::string const & servicePath, std::string channel, std::string version);
// Responder:
virtual void completed(U32 status,
const std::string & reason,
const LLSD& content);
virtual void error(U32 status, const std::string & reason);
private:
static const char * sProtocolVersion;
Client & mClient;
LLHTTPClient mHttpClient;
bool mInProgress;
std::string mVersion;
std::string buildUrl(std::string const & protocolVersion, std::string const & hostUrl,
std::string const & servicePath, std::string channel, std::string version);
LOG_CLASS(LLUpdateChecker::Implementation);
};
// LLUpdateChecker
//-----------------------------------------------------------------------------
@ -134,13 +103,7 @@ void LLUpdateChecker::Implementation::checkVersion(std::string const & protocolV
std::string checkUrl = buildUrl(protocolVersion, hostUrl, servicePath, channel, version);
LL_INFOS("UpdateCheck") << "checking for updates at " << checkUrl << llendl;
// The HTTP client will wrap a raw pointer in a boost::intrusive_ptr causing the
// passed object to be silently and automatically deleted. We pass a self-
// referential intrusive pointer to which we add a reference to keep the
// client from deleting the update checker implementation instance.
LLHTTPClient::ResponderPtr temporaryPtr(this);
boost::intrusive_ptr_add_ref(temporaryPtr.get());
mHttpClient.get(checkUrl, temporaryPtr);
mHttpClient.get(checkUrl, this);
}
void LLUpdateChecker::Implementation::completed(U32 status,

View File

@ -29,6 +29,7 @@
#include <boost/shared_ptr.hpp>
#include "llhttpclient.h"
//
// Implements asynchronous checking for updates.
@ -36,7 +37,36 @@
class LLUpdateChecker {
public:
class Client;
class Implementation;
class Implementation:
public LLHTTPClient::Responder
{
public:
Implementation(Client & client);
~Implementation();
void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,
std::string const & servicePath, std::string channel, std::string version);
// Responder:
virtual void completed(U32 status,
const std::string & reason,
const LLSD& content);
virtual void error(U32 status, const std::string & reason);
private:
static const char * sProtocolVersion;
Client & mClient;
LLHTTPClient mHttpClient;
bool mInProgress;
std::string mVersion;
std::string buildUrl(std::string const & protocolVersion, std::string const & hostUrl,
std::string const & servicePath, std::string channel, std::string version);
LOG_CLASS(LLUpdateChecker::Implementation);
};
// An exception that may be raised on check errors.
class CheckError;
@ -48,7 +78,7 @@ public:
std::string const & servicePath, std::string channel, std::string version);
private:
boost::shared_ptr<Implementation> mImplementation;
LLPointer<Implementation> mImplementation;
};