diff options
| author | MaximB ProductEngine <mberezhnoy@productengine.com> | 2012-10-18 22:29:02 +0300 | 
|---|---|---|
| committer | MaximB ProductEngine <mberezhnoy@productengine.com> | 2012-10-18 22:29:02 +0300 | 
| commit | c43cfcdcbd243410e2f780f58f93100e96fc996c (patch) | |
| tree | d5daa0187843a9302c1011937d452d40692d0d1a | |
| parent | c0b60841ce14a1c449ede17284d2aa6939322be3 (diff) | |
| parent | f9c068462f379a4678e59090a066cfa173504c6b (diff) | |
merge into latest changes
72 files changed, 1241 insertions, 958 deletions
| @@ -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  c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1 @@ -280,7 +281,6 @@ ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5  28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release  005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167  888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175 -4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179  a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1  9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 @@ -299,3 +299,28 @@ b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2  7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201  84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4  092a9effbedd1a0276fa5ced520992ce00f96fbf CHUI-PV-0 +573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5 +8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207 +351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3 +af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212 +015012c2b740ccdec8a8c3d6e5f898449ecfe0b8 DRTVWR-213 +62b07aa81b1957897c3846292bb9412977b0af6c 3.3.4-beta6 +ceed0b65a69f1eac20d523e0203320a32f9a3f3c DRTVWR-215 +733ceac77583874f3626ef7a15c105b83ef0f5bb 3.4.0-beta7 +97977c67245f52db20eb15f1918cc0f24778cabc 3.4.0-release +5adb2b8f96c3cac88ad7c7d996d707f1b29df336 3.4.1-beta1 +b3f74858a1c8720c82d0978f3877a3fc8ba459ec 3.4.1-beta1a +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 +468ca3268229011a59df99229b24315844b33d34 DRTVWR-227 +524da902713e8b60322640b9825101add4a7c497 3.4.1-beta7 +173c2809f9873499c4b9d6bc044ec941c954d3fb DRTVWR-228 +1dc94555582f52718834081e7659e973ae4521f7 3.4.1-beta8 diff --git a/autobuild.xml b/autobuild.xml index b7a73f2c75..63ba9d4a86 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -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> @@ -78,7 +78,7 @@ pre_build()      check_for "After 'autobuild configure'" ${build_dir}/packages/dictionaries -  end_section "Pre$variant" + end_section "Pre$variant"  }  package_llphysicsextensions_tpv() diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 09501e0406..73b3642ae6 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -3,7 +3,7 @@ include(Prebuilt)  # If you want to enable or disable TCMALLOC in viewer builds, this is the place.  # set ON or OFF as desired. -set (USE_TCMALLOC ON) +set (USE_TCMALLOC OFF)  if (STANDALONE)    include(FindGooglePerfTools) diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index ed192a9975..ca258900c7 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -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. diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index afaf366668..70ad10ad55 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -252,21 +252,6 @@ U32 LLMemory::getAllocatedMemKB()  	return sAllocatedMemInKB ;  } -void* ll_allocate (size_t size) -{ -	if (size == 0) -	{ -		llwarns << "Null allocation" << llendl; -	} -	void *p = malloc(size); -	if (p == NULL) -	{ -		LLMemory::freeReserve(); -		llerrs << "Out of memory Error" << llendl; -	} -	return p; -} -  //----------------------------------------------------------------------------  #if defined(LL_WINDOWS) @@ -1365,7 +1350,7 @@ char* LLPrivateMemoryPool::allocate(U32 size)  	//if the asked size larger than MAX_BLOCK_SIZE, fetch from heap directly, the pool does not manage it  	if(size >= CHUNK_SIZE)  	{ -		return (char*)malloc(size) ; +		return (char*)ll_aligned_malloc_16(size) ;  	}  	char* p = NULL ; @@ -1422,7 +1407,7 @@ char* LLPrivateMemoryPool::allocate(U32 size)  			to_log = false ;  		} -		return (char*)malloc(size) ; +		return (char*)ll_aligned_malloc_16(size) ;  	}  	return p ; @@ -1441,7 +1426,7 @@ void LLPrivateMemoryPool::freeMem(void* addr)  	if(!chunk)  	{ -		free(addr) ; //release from heap +		ll_aligned_free_16(addr) ; //release from heap  	}  	else  	{ @@ -1565,7 +1550,7 @@ LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::addChunk(S32 chunk_inde  	mReservedPoolSize += preferred_size + overhead ; -	char* buffer = (char*)malloc(preferred_size + overhead) ; +	char* buffer = (char*)ll_aligned_malloc_16(preferred_size + overhead) ;  	if(!buffer)  	{  		return NULL ; @@ -1633,7 +1618,7 @@ void LLPrivateMemoryPool::removeChunk(LLMemoryChunk* chunk)  	mReservedPoolSize -= chunk->getBufferSize() ;  	//release memory -	free(chunk->getBuffer()) ; +	ll_aligned_free_16(chunk->getBuffer()) ;  }  U16 LLPrivateMemoryPool::findHashKey(const char* addr) @@ -1977,7 +1962,7 @@ char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size,  	if(!poolp)  	{ -		p = (char*)malloc(size) ; +		p = (char*)ll_aligned_malloc_16(size) ;  	}  	else  	{ @@ -2006,7 +1991,7 @@ char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size)  	}  	else  	{ -		return (char*)malloc(size) ; +		return (char*)ll_aligned_malloc_16(size) ;  	}  }  #endif @@ -2031,7 +2016,7 @@ void  LLPrivateMemoryPoolManager::freeMem(LLPrivateMemoryPool* poolp, void* addr  	{  		if(!sPrivatePoolEnabled)  		{ -			free(addr) ; //private pool is disabled. +			ll_aligned_free_16(addr) ; //private pool is disabled.  		}  		else if(!sInstance) //the private memory manager is destroyed, try the dangling list  		{ diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 08e2a2caa6..40cde485cf 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -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*) ); @@ -58,33 +65,39 @@ inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed wi  #endif  } -inline void* ll_aligned_realloc_16(void* ptr, size_t size) // returned hunk MUST be freed with ll_aligned_free_16(). +inline void ll_aligned_free_16(void *p)  {  #if defined(LL_WINDOWS) -	return _aligned_realloc(ptr, size, 16); +	_aligned_free(p);  #elif defined(LL_DARWIN) -	return realloc(ptr,size); // default osx malloc is 16 byte aligned. +	return free(p);  #else -	// The realloc alignment test is skipped on Linux because the ll_aligned_realloc_16() -	// function is not implemented to ensure alignment (see alignment_test.cpp) -	return realloc(ptr,size); // FIXME not guaranteed to be aligned. +	free(p); // posix_memalign() is compatible with heap deallocator  #endif  } -inline void ll_aligned_free_16(void *p) +inline void* ll_aligned_realloc_16(void* ptr, size_t size, size_t old_size) // returned hunk MUST be freed with ll_aligned_free_16().  {  #if defined(LL_WINDOWS) -	_aligned_free(p); +	return _aligned_realloc(ptr, size, 16);  #elif defined(LL_DARWIN) -	return free(p); +	return realloc(ptr,size); // default osx malloc is 16 byte aligned.  #else -	free(p); // posix_memalign() is compatible with heap deallocator +	//FIXME: memcpy is SLOW +	void* ret = ll_aligned_malloc_16(size); +	if (ptr) +	{ +		memcpy(ret, ptr, old_size); +		ll_aligned_free_16(ptr); +	} +	return ret;  #endif  } +  #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 diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index 1738c16dea..abf47a0f57 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -134,8 +134,8 @@ S32 LLQueuedThread::updateQueue(F32 max_time_ms)  		pending = getPending();  		if(pending > 0)  		{ -		unpause(); -	} +			unpause(); +		}  	}  	else  	{ diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index a6ad6b125c..c2fbb544a8 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -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() diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index cf39696b4f..c7984d6dbc 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -98,6 +98,7 @@ private:  protected:  	std::string			mName;  	LLCondition*		mRunCondition; +	LLMutex*			mDataLock;  	apr_thread_t		*mAPRThreadp;  	apr_pool_t			*mAPRPoolp; @@ -123,15 +124,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();  };  //============================================================================ @@ -206,12 +207,12 @@ private:  void LLThread::lockData()  { -	mRunCondition->lock(); +	mDataLock->lock();  }  void LLThread::unlockData()  { -	mRunCondition->unlock(); +	mDataLock->unlock();  } @@ -228,15 +229,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()  	{ diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 6775b005f4..825878c5ef 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -1660,6 +1660,12 @@ static void avg4_colors2(const U8* a, const U8* b, const U8* c, const U8* d, U8*  	dst[1] = (U8)(((U32)(a[1]) + b[1] + c[1] + d[1])>>2);  } +void LLImageBase::setDataAndSize(U8 *data, S32 size) +{  +	ll_assert_aligned(data, 16); +	mData = data; mDataSize = size;  +}	 +  //static  void LLImageBase::generateMip(const U8* indata, U8* mipdata, S32 width, S32 height, S32 nchannels)  { diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index 46e6d1a901..9ce77a0d01 100644 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -148,7 +148,7 @@ public:  protected:  	// special accessor to allow direct setting of mData and mDataSize by LLImageFormatted -	void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; }	 +	void setDataAndSize(U8 *data, S32 size);  public:  	static void generateMip(const U8 *indata, U8* mipdata, int width, int height, S32 nchannels); diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 53d56e96da..85ea14f9bc 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -6979,19 +6979,20 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con  {  	S32 new_verts = mNumVertices+1;  	S32 new_size = new_verts*16; -//	S32 old_size = mNumVertices*16; +	S32 old_size = mNumVertices*16;  	//positions -	mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_size); +	mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_size, old_size);  	ll_assert_aligned(mPositions,16);  	//normals -	mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_size); +	mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_size, old_size);  	ll_assert_aligned(mNormals,16);  	//tex coords  	new_size = ((new_verts*8)+0xF) & ~0xF; -	mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, new_size); +	old_size = ((mNumVertices*8)+0xF) & ~0xF; +	mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, new_size, old_size);  	ll_assert_aligned(mTexCoords,16); @@ -7045,7 +7046,7 @@ void LLVolumeFace::pushIndex(const U16& idx)  	S32 old_size = ((mNumIndices*2)+0xF) & ~0xF;  	if (new_size != old_size)  	{ -		mIndices = (U16*) ll_aligned_realloc_16(mIndices, new_size); +		mIndices = (U16*) ll_aligned_realloc_16(mIndices, new_size, old_size);  		ll_assert_aligned(mIndices,16);  	} @@ -7087,11 +7088,11 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat  	}  	//allocate new buffer space -	mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_count*sizeof(LLVector4a)); +	mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_count*sizeof(LLVector4a), mNumVertices*sizeof(LLVector4a));  	ll_assert_aligned(mPositions, 16); -	mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_count*sizeof(LLVector4a)); +	mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_count*sizeof(LLVector4a), mNumVertices*sizeof(LLVector4a));  	ll_assert_aligned(mNormals, 16); -	mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF); +	mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF, (mNumVertices*sizeof(LLVector2)+0xF) & ~0xF);  	ll_assert_aligned(mTexCoords, 16);  	mNumVertices = new_count; @@ -7138,7 +7139,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat  	new_count = mNumIndices + face.mNumIndices;  	//allocate new index buffer -	mIndices = (U16*) ll_aligned_realloc_16(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF); +	mIndices = (U16*) ll_aligned_realloc_16(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF, (mNumIndices*sizeof(U16)+0xF) & ~0xF);  	//get destination address into new index buffer  	U16* dst_idx = mIndices+mNumIndices; diff --git a/indra/llmath/tests/alignment_test.cpp b/indra/llmath/tests/alignment_test.cpp index 49c668d737..9105b1c1fd 100644 --- a/indra/llmath/tests/alignment_test.cpp +++ b/indra/llmath/tests/alignment_test.cpp @@ -34,16 +34,6 @@  #include "../llsimdmath.h"  #include "../llvector4a.h" -void* operator new(size_t size) -{ -	return ll_aligned_malloc_16(size); -} - -void operator delete(void *p) -{ -	ll_aligned_free_16(p); -} -  namespace tut  { @@ -59,6 +49,27 @@ tut::alignment_test_t tut_alignment_test("LLAlignment");  LL_ALIGN_PREFIX(16)  class MyVector4a  { +public: +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void *p) +	{ +		ll_aligned_free_16(p); +	} + +	void* operator new[](size_t count) +	{	// try to allocate count bytes for an array +		return ll_aligned_malloc_16(count); +	} + +	void operator delete[](void *p) +	{ +		ll_aligned_free_16(p); +	} +  	LLQuad mQ;  } LL_ALIGN_POSTFIX(16); @@ -78,12 +89,8 @@ void alignment_test_object_t::test<1>()  		align_ptr = ll_aligned_malloc_16(sizeof(MyVector4a));  		ensure("ll_aligned_malloc_16 failed", is_aligned(align_ptr,16)); -#if !LL_LINUX -		// Skipping realloc alignment test on Linux because the ll_aligned_realloc_16() -		// function is not implemented to ensure alignment on Linux (see llmemory.h) -		align_ptr = ll_aligned_realloc_16(align_ptr,2*sizeof(MyVector4a)); +		align_ptr = ll_aligned_realloc_16(align_ptr,2*sizeof(MyVector4a), sizeof(MyVector4a));  		ensure("ll_aligned_realloc_16 failed", is_aligned(align_ptr,16)); -#endif // LL_LINUX  		ll_aligned_free_16(align_ptr); diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 5ea9b58300..10c83e6572 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -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; @@ -1101,6 +1104,7 @@ bool LLCurlRequest::getByteRange(const std::string& url,  								 S32 offset, S32 length,  								 LLCurl::ResponderPtr responder)  { +	llassert(LLCurl::sNotQuitting);  	LLCurl::Easy* easy = allocEasy();  	if (!easy)  	{ @@ -1123,6 +1127,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)  	{ @@ -1150,6 +1155,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)  	{ @@ -1504,29 +1510,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());  } @@ -1534,6 +1553,8 @@ void LLCurl::cleanupClass()  //static   CURLM* LLCurl::newMultiHandle()  { +	llassert(sNotQuitting); +  	LLMutexLock lock(sHandleMutexp) ;  	if(sTotalHandles + 1 > sMaxHandles) @@ -1567,6 +1588,7 @@ CURLMcode  LLCurl::deleteMultiHandle(CURLM* handle)  //static   CURL*  LLCurl::newEasyHandle()  { +	llassert(sNotQuitting);  	LLMutexLock lock(sHandleMutexp) ;  	if(sTotalHandles + 1 > sMaxHandles) @@ -1591,7 +1613,9 @@ void  LLCurl::deleteEasyHandle(CURL* handle)  	if(handle)  	{  		LLMutexLock lock(sHandleMutexp) ; +		LL_CHECK_MEMORY  		curl_easy_cleanup(handle) ; +		LL_CHECK_MEMORY  		sTotalHandles-- ;  	}  } diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index d6a7714d4c..62947bdb9d 100644 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h @@ -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  { diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp index d84fe0a49f..9b298d0c04 100644 --- a/indra/llmessage/tests/llcurl_stub.cpp +++ b/indra/llmessage/tests/llcurl_stub.cpp @@ -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; -		} -	} -}; - diff --git a/indra/llmessage/tests/llhttpclient_test.cpp b/indra/llmessage/tests/llhttpclient_test.cpp index e338d4ec71..a2be307cc8 100644 --- a/indra/llmessage/tests/llhttpclient_test.cpp +++ b/indra/llmessage/tests/llhttpclient_test.cpp @@ -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() @@ -258,7 +258,6 @@ namespace tut  	void HTTPClientTestObject::test<1>()  	{  		LLHTTPClient::get(local_server, newResult()); -  		runThePump();  		ensureStatusOK();  		ensure("result object wasn't destroyed", mResultDeleted); diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index dbd96673a1..0644d2638c 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -1074,7 +1074,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)  			mAuthURL = message.getValue("url");  			mAuthRealm = message.getValue("realm");  			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST); -		}		 +		}  		else if(message_name == "debug_message")  		{  			mDebugMessageText = message.getValue("message_text"); diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 28a14b23b9..ed48c49900 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -38,6 +38,10 @@  #include "llglslshader.h"  #include "llmemory.h" +#if LL_DARWIN +#define LL_VBO_POOLING 1 +#else +#endif  //Next Highest Power Of Two  //helper function, returns first number > v that is a power of 2, or v if v is already a power of 2  U32 nhpo2(U32 v) @@ -291,7 +295,6 @@ void LLVBOPool::seedPool() -  void LLVBOPool::cleanup()  {  	U32 size = LL_VBO_BLOCK_SIZE; diff --git a/indra/llui/llchatentry.cpp b/indra/llui/llchatentry.cpp index 2a6ccc3dc9..8e9c6555c3 100644 --- a/indra/llui/llchatentry.cpp +++ b/indra/llui/llchatentry.cpp @@ -136,6 +136,35 @@ void LLChatEntry::updateHistory()  	}  } +void LLChatEntry::beforeValueChange() +{ +    if(this->getLength() == 0 && !mLabel.empty()) +    { +        this->clearSegments(); +    } +} + +void LLChatEntry::onValueChange(S32 start, S32 end) +{ +    //Internally resetLabel() must meet a condition before it can reset the label +    resetLabel(); +} + +bool LLChatEntry::useLabel() +{ +    return !getLength() && !mLabel.empty(); +} + +void LLChatEntry::onFocusReceived() +{ + +} + +void LLChatEntry::onFocusLost() +{ + +} +  BOOL LLChatEntry::handleSpecialKey(const KEY key, const MASK mask)  {  	BOOL handled = FALSE; diff --git a/indra/llui/llchatentry.h b/indra/llui/llchatentry.h index 10a4594e83..49181c8d78 100644 --- a/indra/llui/llchatentry.h +++ b/indra/llui/llchatentry.h @@ -54,11 +54,16 @@ protected:  	friend class LLUICtrlFactory;  	LLChatEntry(const Params& p); +    /*virtual*/ void    beforeValueChange(); +    /*virtual*/ void    onValueChange(S32 start, S32 end); +    /*virtual*/ bool    useLabel();  public:  	virtual void	draw();  	virtual	void	onCommit(); +    /*virtual*/ void	onFocusReceived(); +    /*virtual*/ void	onFocusLost();  	boost::signals2::connection setTextExpandedCallback(const commit_signal_t::slot_type& cb); diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 9a4a90206b..c1a11851e2 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -286,7 +286,7 @@ void LLFolderView::addFolder( LLFolderViewFolder* folder)  	//{  	//	mFolders.insert(mFolders.begin(), folder);  	//} -	} +}  void LLFolderView::closeAllFolders()  { @@ -309,7 +309,7 @@ void LLFolderView::openTopLevelFolders()  // *width should be 0  // conform show folder state works  S32 LLFolderView::arrange( S32* unused_width, S32* unused_height ) -		{ +	{  	mMinWidth = 0;  	S32 target_height; @@ -856,7 +856,7 @@ void LLFolderView::propertiesSelectedItems( void )  	//		multi_propertiesp->openFloater(LLSD());  	//	}  	//} -} +	}  void LLFolderView::autoOpenItem( LLFolderViewFolder* item ) @@ -1542,7 +1542,7 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )  		if (mCallbackRegistrar)          {  			mCallbackRegistrar->popScope(); -        } +	}  	}  	else  	{ @@ -1718,7 +1718,6 @@ void LLFolderView::update()  	{  		mNeedsAutoSelect = TRUE;  	} -  	// filter to determine visibility before arranging  	filter(getFolderViewModel()->getFilter());  	// Clear the modified setting on the filter only if the filter count is non-zero after running the filter process @@ -1727,7 +1726,7 @@ void LLFolderView::update()  	{  		getFolderViewModel()->getFilter().clearModified();  	} -			 +  	// automatically show matching items, and select first one if we had a selection  	if (mNeedsAutoSelect)  	{ diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 98624f42b9..b827acb185 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -338,6 +338,11 @@ const LLStyle::Params& LLTextBase::getStyleParams()  	return mStyle;  } +void LLTextBase::beforeValueChange() +{ + +} +  void LLTextBase::onValueChange(S32 start, S32 end)  {  } @@ -530,7 +535,7 @@ void LLTextBase::drawText()  	{  		return;  	} -	else if (text_len <= 0 && !mLabel.empty() && !hasFocus()) +	else if (useLabel())  	{  		text_len = mLabel.getWString().length();  	} @@ -747,6 +752,8 @@ void LLTextBase::drawText()  S32 LLTextBase::insertStringNoUndo(S32 pos, const LLWString &wstr, LLTextBase::segment_vec_t* segments )  { +    beforeValueChange(); +  	S32 old_len = getLength();		// length() returns character length  	S32 insert_len = wstr.length(); @@ -822,6 +829,8 @@ S32 LLTextBase::insertStringNoUndo(S32 pos, const LLWString &wstr, LLTextBase::s  S32 LLTextBase::removeStringNoUndo(S32 pos, S32 length)  { + +    beforeValueChange();  	segment_set_t::iterator seg_iter = getSegIterContaining(pos);  	while(seg_iter != mSegments.end())  	{ @@ -880,6 +889,8 @@ S32 LLTextBase::removeStringNoUndo(S32 pos, S32 length)  S32 LLTextBase::overwriteCharNoUndo(S32 pos, llwchar wc)  { +    beforeValueChange(); +  	if (pos > (S32)getLength())  	{  		return 0; @@ -2048,7 +2059,7 @@ BOOL LLTextBase::setLabelArg(const std::string& key, const LLStringExplicit& tex  void LLTextBase::resetLabel()  { -	if (!getLength() && !mLabel.empty() && !hasFocus()) +	if (useLabel())  	{  		clearSegments(); @@ -2061,6 +2072,11 @@ void LLTextBase::resetLabel()  	}  } +bool LLTextBase::useLabel() +{ +    return !getLength() && !mLabel.empty() && !hasFocus(); +} +  void LLTextBase::setFont(const LLFontGL* font)  {  	mFont = font; diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 79662ebd33..629b304b25 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -382,7 +382,7 @@ public:  	/**  	 * If label is set, draws text label (which is LLLabelTextSegment) -	 * that is visible when no user text provided and has no focus +	 * that is visible when no user text provided  	 */  	void					resetLabel(); @@ -501,7 +501,9 @@ protected:  	LLTextBase(const Params &p);  	virtual ~LLTextBase();  	void							initFromParams(const Params& p); +    virtual void					beforeValueChange();  	virtual void					onValueChange(S32 start, S32 end); +    virtual bool                    useLabel();  	// draw methods  	void							drawSelectionBackground(); // draws the black box behind the selected text diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index ec1562a4c1..5248feae1b 100644..100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1581,6 +1581,7 @@ set(PACKAGE ON CACHE BOOL  if (WINDOWS)      set_target_properties(${VIEWER_BINARY_NAME}          PROPERTIES +        # *TODO -reenable this once we get server usage sorted out          LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS ${TCMALLOC_LINK_FLAGS}"          LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"          LINK_FLAGS_RELEASE "/FORCE:MULTIPLE /MAP\"secondlife-bin.MAP\" /OPT:REF" diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 6b15e4b21a..d6c781020d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1893,8 +1893,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; @@ -1963,12 +1972,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()) diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 53c77fa22e..e0ca1232b0 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -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; @@ -146,6 +148,7 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,  			heap_enable_lfh_error[i] = GetLastError();  	}  #endif +#endif  	// *FIX: global  	gIconResource = MAKEINTRESOURCE(IDI_LL_ICON); diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 65bfc990d1..7b2c536f5a 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -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)));  	}  } diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 3326103d03..7322b3bb0b 100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -296,10 +296,14 @@ void LLAvatarActions::startConference(const uuid_vec_t& ids, const LLUUID& float  	}  	const std::string title = LLTrans::getString("conference-title");  	LLUUID session_id = gIMMgr->addSession(title, IM_SESSION_CONFERENCE_START, ids[0], id_array, false, floater_id); -	if (session_id != LLUUID::null) + +	if (session_id == LLUUID::null)  	{ -		LLIMFloater::show(session_id); +		return;  	} +	 +	LLIMFloater::show(session_id); +	  	make_ui_sound("UISndStartIM");  } diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 3636f9e9d2..c61a8c8562 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -596,6 +596,14 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p)  	mEditor = LLUICtrlFactory::create<LLTextEditor>(editor_params, this);  } +LLSD LLChatHistory::getValue() const +{ +  LLSD* text=new LLSD();  +  text->assign(mEditor->getText()); +  return *text; +     +} +  LLChatHistory::~LLChatHistory()  {  	this->clear(); diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index 990c52f31b..bb6d4fb59c 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -103,7 +103,7 @@ class LLChatHistory : public LLUICtrl  	public:  		~LLChatHistory(); - +		LLSD getValue() const;     		void initFromParams(const Params&);  		/** diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 4eda2b92b3..954fd429a5 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -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; diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index b4f6bf9383..313b310e1e 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -411,12 +411,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)  					continue;  				} -				if ((params.mVertexBuffer->getTypeMask() & mask) != mask) -				{ //FIXME! -					llwarns << "Missing required components, skipping render batch." << llendl; -					continue; -				} -  				LLRenderPass::applyModelMatrix(params); diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h index 7a4d711d4e..c0976d1d43 100644 --- a/indra/newview/lldriverparam.h +++ b/indra/newview/lldriverparam.h @@ -83,6 +83,16 @@ public:  	LLDriverParam(LLWearable *wearablep);  	~LLDriverParam(); +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void* ptr) +	{ +		ll_aligned_free_16(ptr); +	} +  	// Special: These functions are overridden by child classes  	LLDriverParamInfo*		getInfo() const { return (LLDriverParamInfo*)mInfo; }  	//   This sets mInfo and calls initialization functions diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp index 4f4d9a40b4..2c786b7f8b 100644 --- a/indra/newview/lleventpoll.cpp +++ b/indra/newview/lleventpoll.cpp @@ -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) diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 8d0664770b..582f06eeb0 100644..100755 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -166,7 +166,8 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)  	//special value to indicate uninitialized position  	mIndicesIndex	= 0xFFFFFFFF; - +	 +	mIndexInTex = 0;  	mTexture		= NULL;  	mTEOffset		= -1;  	mTextureIndex = 255; diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp index 809d344d01..bca4b5e447 100644 --- a/indra/newview/llfloaterbuycontents.cpp +++ b/indra/newview/llfloaterbuycontents.cpp @@ -211,8 +211,8 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,  		BOOL item_is_multi = FALSE;  		if ((inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED -		     || inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) -		     && !(inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK)) +			|| inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) +			&& !(inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK))  		{  			item_is_multi = TRUE;  		} diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 0fe0e151fb..1e46d7a402 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -98,7 +98,11 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed)  	mLabelSuggestedUseD(NULL),  	mEditD(NULL),  	mApplyEditsButton(NULL), -	mBeaconColor() +	mBeaconColor(), +	mPreviousValueA(LLPathfindingLinkset::MAX_WALKABILITY_VALUE), +	mPreviousValueB(LLPathfindingLinkset::MAX_WALKABILITY_VALUE), +	mPreviousValueC(LLPathfindingLinkset::MAX_WALKABILITY_VALUE), +	mPreviousValueD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE)  {  } @@ -168,7 +172,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditA = findChild<LLLineEditor>("edit_a_value");  	llassert(mEditA != NULL);  	mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueA));  	mLabelEditB = findChild<LLTextBase>("edit_b_label");  	llassert(mLabelEditB != NULL); @@ -179,7 +183,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditB = findChild<LLLineEditor>("edit_b_value");  	llassert(mEditB != NULL);  	mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueB));  	mLabelEditC = findChild<LLTextBase>("edit_c_label");  	llassert(mLabelEditC != NULL); @@ -190,7 +194,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditC = findChild<LLLineEditor>("edit_c_value");  	llassert(mEditC != NULL);  	mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueC));  	mLabelEditD = findChild<LLTextBase>("edit_d_label");  	llassert(mLabelEditD != NULL); @@ -201,7 +205,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	mEditD = findChild<LLLineEditor>("edit_d_value");  	llassert(mEditD != NULL);  	mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32); -	mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); +	mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueD));  	mApplyEditsButton = findChild<LLButton>("apply_edit_values");  	llassert(mApplyEditsButton != NULL); @@ -323,26 +327,38 @@ void LLFloaterPathfindingLinksets::onClearFiltersClicked()  	rebuildObjectsScrollList();  } -void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl) +void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl, LLSD &pPreviousValue)  {  	LLLineEditor *pLineEditor = static_cast<LLLineEditor *>(pUICtrl);  	llassert(pLineEditor != NULL);  	const std::string &valueString = pLineEditor->getText(); -	S32 value; -	if (LLStringUtil::convertToS32(valueString, value)) +	S32 intValue; +	LLSD value; +	bool doResetValue = false; + +	if (valueString.empty())  	{ -		if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)) -		{ -			value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE); -			pLineEditor->setValue(LLSD(value)); -		} +		value = pPreviousValue; +		doResetValue = true; +	} +	else if (LLStringUtil::convertToS32(valueString, intValue)) +	{ +		doResetValue = ((intValue < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (intValue > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)); +		value = LLSD(llclamp(intValue, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE));  	}  	else  	{ -		pLineEditor->setValue(LLSD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE)); +		value = LLSD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE); +		doResetValue = true; +	} + +	if (doResetValue) +	{ +		pLineEditor->setValue(value);  	} +	pPreviousValue = value;  }  void LLFloaterPathfindingLinksets::onApplyChangesClicked() @@ -376,10 +392,14 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues()  		const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(firstSelectedObjectPtr.get());  		setEditLinksetUse(linkset->getLinksetUse()); -		mEditA->setValue(LLSD(linkset->getWalkabilityCoefficientA())); -		mEditB->setValue(LLSD(linkset->getWalkabilityCoefficientB())); -		mEditC->setValue(LLSD(linkset->getWalkabilityCoefficientC())); -		mEditD->setValue(LLSD(linkset->getWalkabilityCoefficientD())); +		mPreviousValueA = LLSD(linkset->getWalkabilityCoefficientA()); +		mPreviousValueB = LLSD(linkset->getWalkabilityCoefficientB()); +		mPreviousValueC = LLSD(linkset->getWalkabilityCoefficientC()); +		mPreviousValueD = LLSD(linkset->getWalkabilityCoefficientD()); +		mEditA->setValue(mPreviousValueA); +		mEditB->setValue(mPreviousValueB); +		mEditC->setValue(mPreviousValueC); +		mEditD->setValue(mPreviousValueD);  	}  } diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 6538308122..7149da9215 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -74,7 +74,7 @@ private:  	void onApplyAllFilters();  	void onClearFiltersClicked(); -	void onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl); +	void onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl, LLSD &pPreviousValue);  	void onApplyChangesClicked();  	void clearFilters(); @@ -132,6 +132,11 @@ private:  	LLButton         *mApplyEditsButton;  	LLColor4         mBeaconColor; + +	LLSD             mPreviousValueA; +	LLSD             mPreviousValueB; +	LLSD             mPreviousValueC; +	LLSD             mPreviousValueD;  };  #endif // LL_LLFLOATERPATHFINDINGLINKSETS_H diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index c5df7e16e9..a242b224cd 100644 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -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() diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index 4a63585ed5..dcecce6fe4 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -115,8 +115,8 @@ void LLPanelMarketplaceInbox::onFocusReceived()  	if (sidepanel_inventory)  	{  		sidepanel_inventory->clearSelections(true, false); -	} - +		} +	  	gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());  } @@ -167,8 +167,8 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const  				if (inbox_item_view && inbox_item_view->isFresh())  				{  					fresh_item_count++; -				} -			} +		} +	}  		}  	} diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp index 70f3b5335e..c6b9aaae4b 100644 --- a/indra/newview/llpolymesh.cpp +++ b/indra/newview/llpolymesh.cpp @@ -240,8 +240,7 @@ BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )  			mBaseCoords[i].clear();  			mBaseNormals[i].clear();  			mBaseBinormals[i].clear(); -			mTexCoords[i].clear(); -            mWeights[i] = 0.f; +			mWeights[i] = 0.f;          }          mNumVertices = numVertices;          return TRUE; diff --git a/indra/newview/llpolymesh.h b/indra/newview/llpolymesh.h index ffb11a3f7e..850171d169 100644 --- a/indra/newview/llpolymesh.h +++ b/indra/newview/llpolymesh.h @@ -406,6 +406,16 @@ public:  	LLPolySkeletalDistortion(LLVOAvatar *avatarp);  	~LLPolySkeletalDistortion(); +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void* ptr) +	{ +		ll_aligned_free_16(ptr); +	} +  	// Special: These functions are overridden by child classes  	LLPolySkeletalDistortionInfo*	getInfo() const { return (LLPolySkeletalDistortionInfo*)mInfo; }  	//   This sets mInfo and calls initialization functions diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp index d25d1420ee..bd96608641 100644 --- a/indra/newview/llpolymorph.cpp +++ b/indra/newview/llpolymorph.cpp @@ -73,9 +73,9 @@ LLPolyMorphData::LLPolyMorphData(const LLPolyMorphData &rhs) :  {  	const S32 numVertices = mNumIndices; -	mCoords = new LLVector4a[numVertices]; -	mNormals = new LLVector4a[numVertices]; -	mBinormals = new LLVector4a[numVertices]; +	mCoords = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a))); +	mNormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a))); +	mBinormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));  	mTexCoords = new LLVector2[numVertices];  	mVertexIndices = new U32[numVertices]; @@ -89,17 +89,12 @@ LLPolyMorphData::LLPolyMorphData(const LLPolyMorphData &rhs) :  	}  } -  //-----------------------------------------------------------------------------  // ~LLPolyMorphData()  //-----------------------------------------------------------------------------  LLPolyMorphData::~LLPolyMorphData()  { -	delete [] mVertexIndices; -	delete [] mCoords; -	delete [] mNormals; -	delete [] mBinormals; -	delete [] mTexCoords; +	freeData();  }  //----------------------------------------------------------------------------- @@ -119,11 +114,16 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)  	}  	//------------------------------------------------------------------------- +	// free any existing data +	//------------------------------------------------------------------------- +	freeData(); + +	//-------------------------------------------------------------------------  	// allocate vertices  	//------------------------------------------------------------------------- -	mCoords = new LLVector4a[numVertices]; -	mNormals = new LLVector4a[numVertices]; -	mBinormals = new LLVector4a[numVertices]; +	mCoords = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a))); +	mNormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a))); +	mBinormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));  	mTexCoords = new LLVector2[numVertices];  	// Actually, we are allocating more space than we need for the skiplist  	mVertexIndices = new U32[numVertices]; @@ -207,6 +207,42 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)  }  //----------------------------------------------------------------------------- +// freeData() +//----------------------------------------------------------------------------- +void LLPolyMorphData::freeData() +{ +	if (mCoords != NULL) +	{ +		ll_aligned_free_16(mCoords); +		mCoords = NULL; +	} + +	if (mNormals != NULL) +	{ +		ll_aligned_free_16(mNormals); +		mNormals = NULL; +	} + +	if (mBinormals != NULL) +	{ +		ll_aligned_free_16(mBinormals); +		mBinormals = NULL; +	} + +	if (mTexCoords != NULL) +	{ +		delete [] mTexCoords; +		mTexCoords = NULL; +	} + +	if (mVertexIndices != NULL) +	{ +		delete [] mVertexIndices; +		mVertexIndices = NULL; +	} +} + +//-----------------------------------------------------------------------------  // LLPolyMorphTargetInfo()  //-----------------------------------------------------------------------------  LLPolyMorphTargetInfo::LLPolyMorphTargetInfo() diff --git a/indra/newview/llpolymorph.h b/indra/newview/llpolymorph.h index 46e23b7792..678599d7e1 100644 --- a/indra/newview/llpolymorph.h +++ b/indra/newview/llpolymorph.h @@ -48,6 +48,16 @@ public:  	~LLPolyMorphData();  	LLPolyMorphData(const LLPolyMorphData &rhs); +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void* ptr) +	{ +		ll_aligned_free_16(ptr); +	} +  	BOOL			loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);  	const std::string& getName() { return mName; } @@ -67,6 +77,9 @@ public:  	F32					mMaxDistortion;		// maximum single vertex distortion in a given morph  	LLVector4a			mAvgDistortion;		// average vertex distortion, to infer directionality of the morph  	LLPolyMeshSharedData*	mMesh; + +private: +	void freeData();  };  //----------------------------------------------------------------------------- diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index e62c9c3da5..6acbf82fd7 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -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;  								} diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index f050df2b39..e63037b4a8 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -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(); } diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 2d2b5202e0..64477765e1 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -256,6 +256,47 @@ bool LLSpeakersDelayActionsStorage::onTimerActionCallback(const LLUUID& speaker_  // +// ModerationResponder +// + +class ModerationResponder : public LLHTTPClient::Responder +{ +public: +	ModerationResponder(const LLUUID& session_id) +	{ +		mSessionID = session_id; +	} +	 +	virtual void error(U32 status, const std::string& reason) +	{ +		llwarns << status << ": " << reason << llendl; +		 +		if ( gIMMgr ) +		{ +			//403 == you're not a mod +			//should be disabled if you're not a moderator +			if ( 403 == status ) +			{ +				gIMMgr->showSessionEventError( +											  "mute", +											  "not_a_mod_error", +											  mSessionID); +			} +			else +			{ +				gIMMgr->showSessionEventError( +											  "mute", +											  "generic_request_error", +											  mSessionID); +			} +		} +	} +	 +private: +	LLUUID mSessionID; +}; + +//  // LLSpeakerMgr  // @@ -480,6 +521,28 @@ void LLSpeakerMgr::updateSpeakerList()  		}  	} +	else  +	{ +		// Check if the list is empty, except if it's Nearby Chat (session_id NULL). +		LLUUID session_id = getSessionID(); +		if ((mSpeakers.size() == 0) && (!session_id.isNull())) +		{ +			// If the list is empty, we update it with whatever was used to initiate the call so that it doesn't stay empty too long. +			// *TODO: Fix the server side code that sometimes forgets to send back the list of agents after a chat started  +			// (IOW, fix why we get no ChatterBoxSessionAgentListUpdates message after the initial ChatterBoxSessionStartReply) +			LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id); +			for (uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();it!=session->mInitialTargetIDs.end();++it) +			{ +				// We only add avatars that are on line +				if (LLAvatarTracker::instance().isBuddyOnline(*it)) +				{ +					setSpeaker(*it, "", LLSpeaker::STATUS_VOICE_ACTIVE, LLSpeaker::SPEAKER_AGENT); +				} +			} +			// Also add the current agent +			setSpeaker(gAgentID, "", LLSpeaker::STATUS_VOICE_ACTIVE, LLSpeaker::SPEAKER_AGENT); +		} +	}  }  void LLSpeakerMgr::setSpeakerNotInChannel(LLSpeaker* speakerp) @@ -733,43 +796,6 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)  	}  } -class ModerationResponder : public LLHTTPClient::Responder -{ -public: -	ModerationResponder(const LLUUID& session_id) -	{ -		mSessionID = session_id; -	} - -	virtual void error(U32 status, const std::string& reason) -	{ -		llwarns << status << ": " << reason << llendl; - -		if ( gIMMgr ) -		{ -			//403 == you're not a mod -			//should be disabled if you're not a moderator -			if ( 403 == status ) -			{ -				gIMMgr->showSessionEventError( -					"mute", -					"not_a_mod_error", -					mSessionID); -			} -			else -			{ -				gIMMgr->showSessionEventError( -					"mute", -					"generic_request_error", -					mSessionID); -			} -		} -	} - -private: -	LLUUID mSessionID; -}; -  void LLIMSpeakerMgr::toggleAllowTextChat(const LLUUID& speaker_id)  {  	LLPointer<LLSpeaker> speakerp = findSpeaker(speaker_id); diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 467115c928..ad09af6594 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -510,7 +510,13 @@ void LLTexLayerSetBuffer::doUpload()  			BOOL valid = FALSE;  			LLPointer<LLImageJ2C> integrity_test = new LLImageJ2C;  			S32 file_size = 0; -			U8* data = LLVFile::readFile(gVFS, asset_id, LLAssetType::AT_TEXTURE, &file_size); +			 +			//data buffer MUST be allocated using LLImageBase +			LLVFile file(gVFS, asset_id, LLAssetType::AT_TEXTURE); +			file_size = file.getSize(); +			U8* data = integrity_test->allocateData(file_size); +			file.read(data, file_size); +			  			if (data)  			{  				valid = integrity_test->validate(data, file_size); // integrity_test will delete 'data' diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h index 2c0da60b48..fffe20208f 100644 --- a/indra/newview/lltexlayerparams.h +++ b/indra/newview/lltexlayerparams.h @@ -67,6 +67,16 @@ public:  	/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const; +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void* ptr) +	{ +		ll_aligned_free_16(ptr); +	} +  	// LLVisualParam Virtual functions  	///*virtual*/ BOOL		parseData(LLXmlTreeNode* node);  	/*virtual*/ void		apply( ESex avatar_sex ) {} @@ -143,6 +153,16 @@ public:  	LLTexLayerParamColor( LLVOAvatar* avatar );  	/* virtual */ ~LLTexLayerParamColor(); +	void* operator new(size_t size) +	{ +		return ll_aligned_malloc_16(size); +	} + +	void operator delete(void* ptr) +	{ +		ll_aligned_free_16(ptr); +	} +  	/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const;  	// LLVisualParam Virtual functions diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 2ed7488b85..e8a4d8b2f2 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2950,7 +2950,9 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)          ~lcl_responder()              { +				LL_CHECK_MEMORY                  mFetcher->decrCurlPOSTCount(); +				LL_CHECK_MEMORY              }  		// virtual diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h index c58e1adb8c..db5ad9479c 100755 --- a/indra/newview/lltranslate.h +++ b/indra/newview/lltranslate.h @@ -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. diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 6da9296ea3..7990b81d92 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5126,12 +5126,6 @@ class LLEditDelete : public view_listener_t  	}  }; -bool enable_object_return() -{ -	return (!LLSelectMgr::getInstance()->getSelection()->isEmpty() && -		(gAgent.isGodlike() || can_derez(DRD_RETURN_TO_OWNER))); -} -  void handle_spellcheck_replace_with_suggestion(const LLUICtrl* ctrl, const LLSD& param)  {  	const LLContextMenu* menu = dynamic_cast<const LLContextMenu*>(ctrl->getParent()); @@ -5204,6 +5198,12 @@ bool enable_spellcheck_add_to_ignore(const LLUICtrl* ctrl)  	return (spellcheck_handler) && (spellcheck_handler->canAddToIgnore());  } +bool enable_object_return() +{ +	return (!LLSelectMgr::getInstance()->getSelection()->isEmpty() && +		(gAgent.isGodlike() || can_derez(DRD_RETURN_TO_OWNER))); +} +  bool enable_object_delete()  {  	bool new_value =  diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 81cbc3b6c3..775280ca34 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3394,9 +3394,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: diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index b2e6dc4571..2fe6cd578b 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -237,6 +237,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mTimeDilation(1.f),  	mRotTime(0.f),  	mAngularVelocityRot(), +	mPreviousRotation(),  	mState(0),  	mMedia(NULL),  	mClickAction(0), @@ -784,7 +785,7 @@ BOOL LLViewerObject::setDrawableParent(LLDrawable* parentp)  	}  	LLDrawable* old_parent = mDrawable->mParent;  	mDrawable->mParent = parentp;  -	 +		  	if (parentp && mDrawable->isActive())  	{  		parentp->makeActive(); @@ -1410,9 +1411,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  #else  					val = (U16 *) &data[count];  #endif -					setAngularVelocity(	U16_to_F32(val[VX], -size, size), +					new_angv.set(U16_to_F32(val[VX], -size, size),  										U16_to_F32(val[VY], -size, size),  										U16_to_F32(val[VZ], -size, size)); +					setAngularVelocity(new_angv);  					break;  				case 16: @@ -1436,9 +1438,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  					new_rot.mQ[VZ] = U8_to_F32(data[11], -1.f, 1.f);  					new_rot.mQ[VW] = U8_to_F32(data[12], -1.f, 1.f); -					setAngularVelocity(	U8_to_F32(data[13], -size, size), +					new_angv.set(U8_to_F32(data[13], -size, size),  										U8_to_F32(data[14], -size, size),  										U8_to_F32(data[15], -size, size) ); +					setAngularVelocity(new_angv);  					break;  				} @@ -1510,9 +1513,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  				dp->unpackU16(val[VX], "AccX");  				dp->unpackU16(val[VY], "AccY");  				dp->unpackU16(val[VZ], "AccZ"); -				setAngularVelocity(	U16_to_F32(val[VX], -64.f, 64.f), +				new_angv.set(U16_to_F32(val[VX], -64.f, 64.f),  									U16_to_F32(val[VY], -64.f, 64.f),  									U16_to_F32(val[VZ], -64.f, 64.f)); +				setAngularVelocity(new_angv);  			}  			break;  			case OUT_FULL_COMPRESSED: @@ -1556,8 +1560,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  				if (value & 0x80)  				{ -					dp->unpackVector3(vec, "Omega"); -					setAngularVelocity(vec); +					dp->unpackVector3(new_angv, "Omega"); +					setAngularVelocity(new_angv);  				}  				if (value & 0x20) @@ -2038,12 +2042,16 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  		}  	} -	if (new_rot != getRotation() -		|| new_angv != old_angv) +	if ((new_rot != getRotation()) +		|| (new_angv != old_angv)) +	{ +		if (new_rot != mPreviousRotation)  	{ -		if (new_angv != old_angv) +			resetRot(); +		} +		else if (new_angv != old_angv)  		{ -			if (flagUsePhysics()) +			if (flagUsePhysics() || new_angv.isExactlyZero())  			{  				resetRot();  			} @@ -2053,6 +2061,9 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  			}  		} +		// Remember the last rotation value +		mPreviousRotation = new_rot; +  		// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)  		setRotation(new_rot * mAngularVelocityRot);  		setChanged(ROTATED | SILHOUETTE); @@ -2159,28 +2170,28 @@ void LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  	if (!mDead)  	{ -		// CRO - don't velocity interp linked objects! -		// Leviathan - but DO velocity interp joints -		if (!mStatic && sVelocityInterpolate && !isSelected()) -		{ -			// calculate dt from last update -			F32 dt_raw = (F32)(time - mLastInterpUpdateSecs); -			F32 dt = mTimeDilation * dt_raw; +	// CRO - don't velocity interp linked objects! +	// Leviathan - but DO velocity interp joints +	if (!mStatic && sVelocityInterpolate && !isSelected()) +	{ +		// calculate dt from last update +		F32 dt_raw = (F32)(time - mLastInterpUpdateSecs); +		F32 dt = mTimeDilation * dt_raw;  			applyAngularVelocity(dt); -			 +  			if (isAttachment()) -			{ -				mLastInterpUpdateSecs = time; +				{ +					mLastInterpUpdateSecs = time;  				return; -			} -			else -			{	// Move object based on it's velocity and rotation -				interpolateLinearMotion(time, dt); -			}  		} +		else +		{	// Move object based on it's velocity and rotation +			interpolateLinearMotion(time, dt); +		} +	} -		updateDrawable(FALSE); +	updateDrawable(FALSE);  	}  } @@ -4080,7 +4091,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos  	return retval;  } - +//virtual  void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image)   {  	if(index < 0 || index >= getNumTEs()) @@ -5384,9 +5395,9 @@ void LLViewerObject::setPhysicsShapeType(U8 type)  	mPhysicsShapeUnknown = false;  	if (type != mPhysicsShapeType)  	{ -		mPhysicsShapeType = type; -		mCostStale = true; -	} +	mPhysicsShapeType = type; +	mCostStale = true; +}  }  void LLViewerObject::setPhysicsGravity(F32 gravity) diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 22e0de681e..1fb30db8f2 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -322,7 +322,7 @@ public:  	/*virtual*/ S32     setTEGlow(const U8 te, const F32 glow);  	/*virtual*/	BOOL	setMaterial(const U8 material);  	virtual		void	setTEImage(const U8 te, LLViewerTexture *imagep); // Not derived from LLPrimitive -	void                changeTEImage(S32 index, LLViewerTexture* new_image)  ; +	virtual     void    changeTEImage(S32 index, LLViewerTexture* new_image)  ;  	LLViewerTexture		*getTEImage(const U8 te) const;  	void fitFaceTexture(const U8 face); @@ -725,6 +725,7 @@ protected:  	F32				mTimeDilation;				// Time dilation sent with the object.  	F32				mRotTime;					// Amount (in seconds) that object has rotated according to angular velocity (llSetTargetOmega)  	LLQuaternion	mAngularVelocityRot;		// accumulated rotation from the angular velocity computations +	LLQuaternion	mPreviousRotation;  	U8				mState;	// legacy  	LLViewerObjectMedia* mMedia;	// NULL if no media associated diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 05c7ef5381..47a99d7ea4 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -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: diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index f80abc816f..4e37a9043d 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -283,7 +283,7 @@ private:  	struct Line  	{  		Line(const std::string& in_text, S32 in_x, S32 in_y) : text(in_text), x(in_x), y(in_y) {} -		std::string text; +		std::string text;   		S32 x,y;  	}; @@ -2561,14 +2561,14 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)  	// If "Pressing letter keys starts local chat" option is selected, we are not in mouselook,   	// no view has keyboard focus, this is a printable character key (and no modifier key is   	// pressed except shift), then give focus to nearby chat (STORM-560) -	if ( gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() &&
 -		!keyboard_focus && key < 0x80 && (mask == MASK_NONE || mask == MASK_SHIFT) )
 -	{
 -		// Initialize nearby chat if it's missing
 -		if (!nearby_chat)
 -		{	
 -			LLSD name("im_container");
 -			LLFloaterReg::toggleInstanceOrBringToFront(name);
 +	if ( gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() && +		!keyboard_focus && key < 0x80 && (mask == MASK_NONE || mask == MASK_SHIFT) ) +	{ +		// Initialize nearby chat if it's missing +		if (!nearby_chat) +		{	 +			LLSD name("im_container"); +			LLFloaterReg::toggleInstanceOrBringToFront(name);  		}  		LLChatEntry* chat_editor = LLFloaterReg::findTypedInstance<LLNearbyChat>("nearby_chat")->getChatBox(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 958282f1eb..b73c2a20ab 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1803,6 +1803,18 @@ void LLVOVolume::setNumTEs(const U8 num_tes)  	return ;  } +//virtual      +void LLVOVolume::changeTEImage(S32 index, LLViewerTexture* imagep) +{ +	BOOL changed = (mTEImages[index] != imagep); +	LLViewerObject::changeTEImage(index, imagep); +	if (changed) +	{ +		gPipeline.markTextured(mDrawable); +		mFaceMappingChanged = TRUE; +	} +} +  void LLVOVolume::setTEImage(const U8 te, LLViewerTexture *imagep)  {  	BOOL changed = (mTEImages[te] != imagep); diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 0082f2e991..5482c80f2b 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -173,6 +173,7 @@ public:  	/*virtual*/ void	setScale(const LLVector3 &scale, BOOL damped); +	/*virtual*/ void    changeTEImage(S32 index, LLViewerTexture* new_image)  ;  	/*virtual*/ void	setNumTEs(const U8 num_tes);  	/*virtual*/ void	setTEImage(const U8 te, LLViewerTexture *imagep);  	/*virtual*/ S32		setTETexture(const U8 te, const LLUUID &uuid); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c7ebaf6fbe..ba047487f5 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2313,7 +2313,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  		bound_shader = true;  		gOcclusionCubeProgram.bind();  	} - +	  	if (sUseOcclusion > 1)  	{  		if (mCubeVB.isNull()) @@ -2491,7 +2491,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)  			{  				gOcclusionCubeProgram.bind();  			} -			} +		}  		if (mCubeVB.isNull())  		{ //cube VB will be used for issuing occlusion queries @@ -2548,11 +2548,6 @@ void LLPipeline::updateGL()  			glu->mInQ = FALSE;  			LLGLUpdate::sGLQ.pop_front();  		} - -	{ //seed VBO Pools -		LLFastTimer t(FTM_SEED_VBO_POOLS); -		LLVertexBuffer::seedPools(); -	}  	}  	{ //seed VBO Pools @@ -3336,11 +3331,11 @@ void renderScriptedTouchBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderPhysicalBeacons(LLDrawable* drawablep)  { @@ -3365,11 +3360,11 @@ void renderPhysicalBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderMOAPBeacons(LLDrawable* drawablep)  { @@ -3405,11 +3400,11 @@ void renderMOAPBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderParticleBeacons(LLDrawable* drawablep)  { @@ -3434,11 +3429,11 @@ void renderParticleBeacons(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void renderSoundHighlights(LLDrawable* drawablep)  { @@ -3456,11 +3451,11 @@ void renderSoundHighlights(LLDrawable* drawablep)  				if (facep)  				{  					gPipeline.mHighlightFaces.push_back(facep); -				}  			}  		}  	}  } +}  void LLPipeline::postSort(LLCamera& camera)  { @@ -3673,7 +3668,7 @@ void LLPipeline::postSort(LLCamera& camera)  						if (facep)  						{  							gPipeline.mSelectedFaces.push_back(facep); -						} +					}  					}  					return true;  				} diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index c4c4defab9..856f91e214 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -21,6 +21,7 @@  			<menu_item_call label="Beschäftigt" name="Set Busy"/>  		</menu>  		<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/> +		<menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>  		<menu_item_call label="Kontoübersicht..." name="Manage My Account">  			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>  		</menu_item_call> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 8cd0463de8..2b542595c5 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -255,11 +255,12 @@               bottom="0"               expand_lines_count="5"               follows="left|right|bottom" -	         font="SansSerifSmall" +	           font="SansSerifSmall"               visible="true"               height="20"               is_expandable="true"               label="To" +             text_tentative_color="TextFgTentativeColor"               layout="bottomleft"               name="chat_editor"               max_length="1023" diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index 9bc5c7d5a4..4a457fb929 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -6,7 +6,7 @@      height="395"      width="1075"      min_height="395" -    min_width="1075" +    min_width="990"      layout="topleft"      name="floater_pathfinding_linksets"      help_topic="floater_pathfinding_linksets" @@ -524,7 +524,7 @@          tool_tip="Walkability for characters of type D.  Example character type is other."          width="45" />      <button -        follows="right|bottom" +        follows="left|bottom"          height="21"          label="Apply changes"          layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 2e29c61cb2..6021ba0a5a 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -134,16 +134,6 @@       top_delta="-25"       name="Pipette"       width="28" /> -   <check_box -     follows="left|bottom" -     height="20" -     initial_value="true" -     label="Live Preview" -     layout="topleft" -     left="4" -     name="apply_immediate_check" -     top="262" -     width="120" />     <text       follows="left|bottom"       height="20" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 606fdd33d9..4410f41e29 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7637,18 +7637,6 @@ We cannot display a preview of this texture because it is no-copy and/or no-tran    <notification     icon="alertmodal.tga" -   name="LivePreviewUnavailable" -   type="alert"> -    -We cannot display a preview of this texture because it is no-copy and/or no-transfer. -  <usetemplate -    ignoretext="Warn me that Live Preview mode is not available for no-copy and/or no-transfer textures" -    name="okignore" -    yestext="OK"/> -  </notification> - -  <notification -   icon="alertmodal.tga"     name="ConfirmLeaveCall"     type="alert">  Are you sure you want to leave this call? diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index e9a787cef0..e69a17e037 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -1,36 +1,36 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel -    height="570" -    layout="topleft" -    name="object properties" -    help_topic="object_properties" -    title="Object Profile" -    width="333"> -  <panel.string -      name="text deed continued"> -    Deed -  </panel.string> -  <panel.string -      name="text deed"> -    Deed -  </panel.string> -  <panel.string -      name="text modify info 1"> -    You can modify this object -  </panel.string> -  <panel.string -      name="text modify info 2"> -    You can modify these objects -  </panel.string> -  <panel.string -      name="text modify info 3"> -    You can't modify this object -  </panel.string> -  <panel.string -      name="text modify info 4"> -    You can't modify these objects -  </panel.string> -  <panel.string +	 height="570" +	 layout="topleft" +	 name="object properties" +	 help_topic="object_properties" +	 title="Object Profile" +	 width="333"> +	 <panel.string +	  name="text deed continued"> +		Deed +	 </panel.string> +	<panel.string +	 name="text deed"> +		Deed +	</panel.string> +            <panel.string +             name="text modify info 1"> +                You can modify this object +            </panel.string> +            <panel.string +             name="text modify info 2"> +                You can modify these objects +            </panel.string> +            <panel.string +             name="text modify info 3"> +                You can't modify this object +            </panel.string> +            <panel.string +             name="text modify info 4"> +                You can't modify these objects +            </panel.string> +            <panel.string        name="text modify info 5">      You can't modify this object across a region boundary    </panel.string> @@ -39,399 +39,399 @@      You can't modify these objects across a region boundary    </panel.string>    <panel.string -      name="text modify warning"> -    This object has linked parts -  </panel.string> -  <panel.string -      name="Cost Default"> -    Price: L$ -  </panel.string> -  <panel.string -      name="Cost Total"> -    Total Price: L$ -  </panel.string> -  <panel.string -      name="Cost Per Unit"> -    Price Per: L$ -  </panel.string> -  <panel.string -      name="Cost Mixed"> -    Mixed Price -  </panel.string> -  <panel.string -      name="Sale Mixed"> -    Mixed Sale -  </panel.string> -  <button -      follows="top|left" -      height="24" -      image_hover_unselected="BackButton_Over" -      image_pressed="BackButton_Press" -      image_unselected="BackButton_Off" -      layout="topleft" -      left="8" -      name="back_btn" -      tab_stop="false" -      top="0" -      width="30" -      use_draw_context_alpha="false" /> -  <text -      follows="top|left|right" -      font="SansSerifHuge" -      height="26" -      layout="topleft" -      left_pad="10" -      name="title" -      text_color="LtGray" -      top="0" -      use_ellipses="true" -      value="Object Profile" -      width="290" /> -  <text -      follows="top|left" -      height="13" -      layout="topleft" -      left="45" -      name="where" -      text_color="LtGray_50" -      value="(Inworld)" -      width="150" /> -  <panel -      follows="all" -      height="490" -      label="" -      layout="topleft" -      left="10" -      help_topic="" -      name="properties_panel" -      top="45" -      width="313" -      background_visible="true" -      bg_alpha_color="DkGray2"> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="10" -        layout="topleft" -        left="5" -        name="Name:" -        top="10" -        width="78"> -      Name: -    </text> -    <line_editor -        border_style="line" -        border_thickness="1" -        follows="left|top|right" -        height="20" -        layout="topleft" -        left_delta="78" -        max_length_bytes="63" -        name="Object Name" -        top_delta="0" -        width="225" /> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="10" -        layout="topleft" -        left="5" -        name="Description:" -        top_pad="10" -        width="78"> -      Description: -    </text> -    <line_editor -        border_style="line" -        border_thickness="1" -        follows="left|top|right" -        height="23" -        layout="topleft" -        name="Object Description" -        select_on_focus="true" -        left_delta="78" -        max_length_bytes="127" -        top_delta="-5" -        width="225"/> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="23" -        layout="topleft" -        left="5" -        name="CreatorNameLabel" -        top_pad="12" -        width="78"> -      Creator: -    </text> -    <text -        type="string" -        follows="left|right|top" -        font="SansSerifSmall" -        height="15" -        layout="topleft" -        left_pad="0" -        name="Creator Name" -        top_delta="0" -        translate="false" -        use_ellipses="true"  -        width="225"> -      TestString PleaseIgnore -    </text> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="23" -        layout="topleft" -        left="5" -        name="Owner:" -        top_pad="15" -        width="78"> -      Owner: -    </text> -    <text -        type="string" -        follows="left|right|top" -        font="SansSerifSmall" -        height="15" -        layout="topleft" -        left_pad="0" -        name="Owner Name" -        top_delta="0" -        translate="false" -        use_ellipses="true"  -        width="225"> -      TestString PleaseIgnore -    </text> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="23" -        layout="topleft" -        left="5" -        name="Group_label" -        top_pad="15" -        width="78"> -      Group: -    </text> +             name="text modify warning"> +                This object has linked parts +            </panel.string> +            <panel.string +             name="Cost Default"> +                Price: L$ +            </panel.string> +            <panel.string +             name="Cost Total"> +                Total Price: L$ +            </panel.string> +            <panel.string +             name="Cost Per Unit"> +                Price Per: L$ +            </panel.string> +            <panel.string +             name="Cost Mixed"> +                Mixed Price +            </panel.string> +            <panel.string +             name="Sale Mixed"> +                Mixed Sale +            </panel.string>      <button -        follows="top|left" -        height="10" -        image_disabled="Activate_Checkmark" -        image_selected="Activate_Checkmark" -        image_unselected="Activate_Checkmark" -        image_color="White_50" -        layout="topleft" -        left_pad="0" -        top_delta="0" -        name="button set group" -        tab_stop="false" -        tool_tip="Choose a group to share this object's permissions" -        width="10" /> -    <name_box -        follows="left|top" -        height="18" -        initial_value="Loading..." -        layout="topleft" -        left_pad="5" -        top_delta="-1" -        name="Group Name Proxy" -        width="150" /> -    <button -        follows="top|left" -        height="23" -        label="Deed" -        label_selected="Deed" -        layout="topleft" -        name="button deed" -        top_pad="0" -        left="81" -        tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." -        width="100" /> -    <text -        type="string" -        length="1" -        follows="left|top" -        height="9" -        layout="topleft" -        top_pad="5" -        left="5" -        name="label click action" -        width="280"> -      Click to: -    </text> -    <combo_box -        follows="left|top" -        height="23" -        layout="topleft" -        name="clickaction" -        width="168" -        left="81"> -      <combo_box.item -          label="Touch  (default)" -          name="Touch/grab(default)" +     follows="top|left" +     height="24" +     image_hover_unselected="BackButton_Over" +     image_pressed="BackButton_Press" +     image_unselected="BackButton_Off" +     layout="topleft" +     left="8" +     name="back_btn" +     tab_stop="false" +     top="0" +     width="30" +     use_draw_context_alpha="false" /> +        <text +     follows="top|left|right" +     font="SansSerifHuge" +     height="26" +     layout="topleft" +     left_pad="10" +     name="title" +     text_color="LtGray" +     top="0" +     use_ellipses="true" +     value="Object Profile" +     width="290" /> +	    <text +     follows="top|left" +     height="13" +     layout="topleft" +     left="45" +     name="where" +     text_color="LtGray_50" +     value="(Inworld)" +     width="150" /> +	<panel +         follows="all" +         height="490" +         label="" +         layout="topleft" +         left="10" +         help_topic="" +         name="properties_panel" +         top="45" +         width="313" +   background_visible="true" +   bg_alpha_color="DkGray2"> +	    	    <text +		     type="string" +		     length="1" +		     follows="left|top" +		     height="10" +		     layout="topleft" +		     left="5" +             name="Name:" +		     top="10" +		     width="78"> +	        Name: +	    </text> +	    <line_editor +		     border_style="line" +		     border_thickness="1" +	    	 follows="left|top|right" +		     height="20" +		     layout="topleft" +	    	 left_delta="78" +		     max_length_bytes="63" +             name="Object Name" +	    	 top_delta="0" +		     width="225" /> +	    <text +	    type="string" +	    length="1" +	    follows="left|top" +	    height="10" +	    layout="topleft" +	    left="5" +             name="Description:" +	    top_pad="10" +	    width="78"> +	        Description: +	    </text> +            <line_editor +	     border_style="line" +    	     border_thickness="1" +             follows="left|top|right" +             height="23" +             layout="topleft" +             name="Object Description" +             select_on_focus="true" +    		 left_delta="78" +		     max_length_bytes="127" +	    	 top_delta="-5" +	    	 width="225"/> +	    <text +		     type="string" +		     length="1" +		     follows="left|top" +		     height="23" +		     layout="topleft" +    		 left="5" +		 name="CreatorNameLabel" +		  top_pad="12" +		     width="78"> +	        Creator: +    	</text> +	    <text +		     type="string" +     follows="left|right|top" +     font="SansSerifSmall" +     height="15" +     layout="topleft" +     left_pad="0" +             name="Creator Name" +		     top_delta="0" +		     translate="false" +         use_ellipses="true"  +		     width="225"> +	        TestString PleaseIgnore +	     </text> +	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="23" +			layout="topleft" +			left="5" +			name="Owner:" +			top_pad="15" +			 width="78"> +			    Owner: +	     </text> +	     <text +			    type="string" +			    follows="left|right|top" +			    font="SansSerifSmall" +			    height="15" +			    layout="topleft" +			    left_pad="0" +			    name="Owner Name" +			    top_delta="0" +			    translate="false" +          use_ellipses="true"  +			    width="225"> +			    TestString PleaseIgnore +	     </text> +	    	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="23" +			 layout="topleft" +			 left="5" +			name="Group_label" +			top_pad="15" +			width="78"> +			    Group: +	     </text> +      		<button +			 follows="top|left" +			 height="10" +			 image_disabled="Activate_Checkmark" +			 image_selected="Activate_Checkmark" +			 image_unselected="Activate_Checkmark" +			 image_color="White_50" +			 layout="topleft" +			 left_pad="0" +			 top_delta="0" +			 name="button set group" +			 tab_stop="false" +			 tool_tip="Choose a group to share this object's permissions" +			 width="10" /> +            <name_box +             follows="left|top" +             height="18" +             initial_value="Loading..." +             layout="topleft" +             left_pad="5" +             top_delta="-1" +             name="Group Name Proxy" +             width="150" /> +            <button +             follows="top|left" +             height="23" +             label="Deed" +             label_selected="Deed" +             layout="topleft" +             name="button deed" +             top_pad="0" +             left="81" +             tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." +             width="100" /> +            <text +             type="string" +             length="1" +             follows="left|top" +             height="9" +             layout="topleft" +             top_pad="5" +             left="5" +             name="label click action" +             width="280"> +                Click to: +            </text> +            <combo_box +             follows="left|top" +             height="23" +             layout="topleft" +             name="clickaction" +             width="168" +             left="81"> +                <combo_box.item +                 label="Touch  (default)" +                 name="Touch/grab(default)"            value="Touch" /> -      <combo_box.item -          label="Sit on object" -          name="Sitonobject" +                <combo_box.item +                 label="Sit on object" +                 name="Sitonobject"            value="Sit" /> -      <combo_box.item -          label="Buy object" -          name="Buyobject" +                <combo_box.item +                 label="Buy object" +                 name="Buyobject"            value="Buy" /> -      <combo_box.item -          label="Pay object" -          name="Payobject" +                <combo_box.item +                 label="Pay object" +                 name="Payobject"            value="Pay" /> -      <combo_box.item -          label="Open" -          name="Open" -          value="Open" /> -    </combo_box> -    <panel -        border="false" -        follows="left|top" -        layout="topleft" -        mouse_opaque="false" -        background_visible="true" -        bg_alpha_color="DkGray" -        name="perms_inv" -        left="0" -        top_pad="15" -        height="135" -        width="313"> -      <text -          type="string" -          length="1" +                <combo_box.item +                 label="Open" +                 name="Open" +                 value="Open" /> +            </combo_box> +	 <panel +         border="false" +         follows="left|top" +         layout="topleft" +         mouse_opaque="false" +         background_visible="true" +         bg_alpha_color="DkGray" +         name="perms_inv" +         left="0" +         top_pad="15" +         height="135" +         width="313"> +	  <text +             type="string" +             length="1"            left="5" -          top_pad="15" -          text_color="EmphasisColor" -          height="15" -          follows="left|top|right" -          layout="topleft" -          name="perm_modify" -          width="310"> -        You can modify this object -      </text> -      <text -          type="string" -          length="1" -          follows="left|top" -          height="16" -          layout="topleft" -          left="10" -          name="Anyone can:" -          top_pad="8" -          width="100"> -        Anyone: -      </text> -      <check_box -          height="18" -          label="Copy" -          layout="topleft" -          left_pad="0" -          name="checkbox allow everyone copy" -          top_delta="-2" -          width="90" /> -      <check_box -          height="18" -          label="Move" -          layout="topleft" -          name="checkbox allow everyone move" -          left_pad="0" -          width="150" /> -      <text -          type="string" -          length="1" -          follows="left|top" -          height="16" -          layout="topleft" -          left="10" -          name="GroupLabel" -          top_pad="8" -          width="100"> -        Group: -      </text> -      <check_box -          height="18" -          label="Share" -          layout="topleft" -          left_pad="90" -          top_delta="-2" -          name="checkbox share with group" -          tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." -          width="150" /> -      <text -          type="string" -          length="1" -          follows="left|top" -          height="16" -          layout="topleft" -          left="10" -          name="NextOwnerLabel" -          top_pad="8" -          width="200" -          word_wrap="true"> -        Next owner: -      </text> -      <check_box -          height="18" -          label="Modify" -          layout="topleft" -          left="20" -          top_pad="0" -          name="checkbox next owner can modify" -          width="90" /> -      <check_box -          height="18" -          label="Copy" -          layout="topleft" -          left_pad="0" -          name="checkbox next owner can copy" -          width="90" /> -      <check_box -          height="18" -          label="Transfer" -          layout="topleft" -          left_pad="0" -          name="checkbox next owner can transfer" -          tool_tip="Next owner can give away or resell this object" -          width="106" /> -    </panel> -    <check_box -        height="23" -        label="For Sale" -        layout="topleft" -        left="20" -        name="checkbox for sale" -        top_pad="10" -        width="100" /> -    <combo_box -        height="23" -        left_pad="0" -        layout="topleft" -        follows="left|top" -        name="sale type" -        width="170"> -      <combo_box.item -          name="Copy" -          label="Copy" -          value="2" /> -      <combo_box.item -          name="Contents" -          label="Contents" -          value="3" /> -      <combo_box.item -          name="Original" -          label="Original" -          value="1" /> -    </combo_box> -    <spinner +             top_pad="15" +             text_color="EmphasisColor" +	     height="15" +             follows="left|top|right" +             layout="topleft" +             name="perm_modify" +             width="310"> +                You can modify this object +            </text> +	  	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +               name="Anyone can:" +			 top_pad="8" +			 width="100"> +			Anyone: +	    </text> +	    <check_box +			 height="18" +			 label="Copy" +			 layout="topleft" +			 left_pad="0" +             name="checkbox allow everyone copy" +			 top_delta="-2" +			 width="90" /> +	    <check_box +             height="18" +             label="Move" +             layout="topleft" +             name="checkbox allow everyone move" +			 left_pad="0" +             width="150" /> +	       	<text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +			 name="GroupLabel" +			 top_pad="8" +			 width="100"> +			Group: +    	</text> +			    <check_box +			 height="18" +			 label="Share" +			 layout="topleft" +			 left_pad="90" +			 top_delta="-2" +             name="checkbox share with group" +			 tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." +			 width="150" /> +	    	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +			 name="NextOwnerLabel" +			 top_pad="8" +			 width="200" +			 word_wrap="true"> +			Next owner: +	    </text> +	    <check_box +			 height="18" +			 label="Modify" +			 layout="topleft" +			 left="20" +			 top_pad="0" +             name="checkbox next owner can modify" +			 width="90" /> +	    <check_box +			 height="18" +			 label="Copy" +			 layout="topleft" +			 left_pad="0" +             name="checkbox next owner can copy" +			 width="90" /> +	    <check_box +			 height="18" +			 label="Transfer" +			 layout="topleft" +			 left_pad="0" +             name="checkbox next owner can transfer" +			 tool_tip="Next owner can give away or resell this object" +			 width="106" /> +	    </panel> +	    <check_box +			 height="23" +			 label="For Sale" +			 layout="topleft" +			 left="20" +             name="checkbox for sale" +			 top_pad="10" +			 width="100" /> +		<combo_box +			 height="23" +			 left_pad="0" +			 layout="topleft" +			 follows="left|top" +            name="sale type" +			 width="170"> +        <combo_box.item +           name="Copy" +           label="Copy" +           value="2" /> +        <combo_box.item +           name="Contents" +           label="Contents" +           value="3" /> +        <combo_box.item +           name="Original" +           label="Original" +           value="1" /> +	    </combo_box> +		<spinner          follows="left|top"          decimal_digits="0"          increment="1" @@ -445,17 +445,17 @@          min_val="1"          height="20"          max_val="999999999" /> -    <check_box -        height="20" -        width="110" -        top_pad="6" -        label="Show in search" -        layout="topleft" -        left="120" -        name="search_check" -        tool_tip="Let people see this object in search results" /> -    <text -        type="string" +      <check_box +	   height="20" +	   width="110" +	   top_pad="6" +	   label="Show in search" +       layout="topleft" +	   left="120" +       name="search_check" +       tool_tip="Let people see this object in search results" /> +            <text +             type="string"          follows="left|top"          name="pathfinding_attributes_label"          top_pad="6" @@ -466,7 +466,7 @@      <text          type="string"          follows="left|top" -        text_color="EmphasisColor" +             text_color="EmphasisColor"          name="pathfinding_attributes_value"          width="130"          word_wrap="false" @@ -475,120 +475,120 @@      <text          type="string"          text_color="EmphasisColor" -        length="1" +             length="1"          top_pad="10" -        follows="left|top" -        layout="topleft" -        left="10" -        name="B:" -        height="10" -        width="50"> -      B: -    </text> -    <text -        type="string" -        text_color="White" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="O:" -        height="10" -        width="50"> -      O: -    </text> -    <text -        type="string" -        text_color="EmphasisColor" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="G:" -        height="10" -        width="50"> -      G: -    </text> -    <text -        type="string" -        text_color="White" -        length="1" -        follows="left|top" -        left_pad="0" -        layout="topleft" -        name="E:" -        height="10" -        width="50"> -      E: -    </text> -    <text -        type="string" -        text_color="EmphasisColor" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="N:" -        height="10" -        width="50"> -      N: -    </text> -    <text -        type="string" -        text_color="White" -        length="1" -        follows="left|top" -        layout="topleft" -        left_pad="0" -        name="F:" -        height="10" -        width="50"> -      F: -    </text> -  </panel> -  <panel -      height="25" -      layout="bottomright" -      name="button_panel" -      left="5" -      bottom="5" -      width="313"> -    <button -        follows="bottom|left" -        height="23" -        label="Open" -        layout="topleft" -        left="5" -        name="open_btn" -        top="0" -        width="73" /> -    <button -        follows="bottom|left" -        height="23" -        label="Pay" -        layout="topleft" -        left_pad="5" -        name="pay_btn" -        top="0" -        width="73" /> -    <button -        follows="bottom|left" -        height="23" -        label="Buy" -        layout="topleft" -        left_pad="5" -        name="buy_btn" -        top="0" -        width="73" /> -    <button -        follows="bottom|left" -        height="23" -        label="Details" -        layout="topleft" -        left_pad="5" -        name="details_btn" -        top="0" -        width="74" /> +             follows="left|top" +             layout="topleft" +             left="10" +             name="B:" +             height="10" +             width="50"> +                B: +            </text> +            <text +             type="string" +             text_color="White" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="O:" +             height="10" +             width="50"> +                O: +            </text> +            <text +             type="string" +             text_color="EmphasisColor" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="G:" +             height="10" +             width="50"> +                G: +            </text> +            <text +             type="string" +             text_color="White" +             length="1" +             follows="left|top" +             left_pad="0" +             layout="topleft" +             name="E:" +             height="10" +             width="50"> +                E: +            </text> +            <text +             type="string" +             text_color="EmphasisColor" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="N:" +             height="10" +             width="50"> +                N: +            </text> +            <text +             type="string" +             text_color="White" +             length="1" +             follows="left|top" +             layout="topleft" +             left_pad="0" +             name="F:" +             height="10" +             width="50"> +                F: +            </text> +		</panel> +    <panel +		 height="25" +		 layout="bottomright" +		 name="button_panel" +		 left="5" +		 bottom="5" +		 width="313"> +        <button +		     follows="bottom|left" +		     height="23" +		     label="Open" +		     layout="topleft" +		     left="5" +		     name="open_btn" +		     top="0" +		     width="73" /> +	    <button +		     follows="bottom|left" +		     height="23" +		     label="Pay" +		     layout="topleft" +		     left_pad="5" +		     name="pay_btn" +		     top="0" +		     width="73" /> +	    <button +		     follows="bottom|left" +		     height="23" +		     label="Buy" +		     layout="topleft" +		     left_pad="5" +		     name="buy_btn" +		     top="0" +		     width="73" /> +        <button +		     follows="bottom|left" +		     height="23" +		     label="Details" +		     layout="topleft" +		     left_pad="5" +		     name="details_btn" +		     top="0" +		     width="74" /> -  </panel> +	</panel>  </panel> diff --git a/indra/newview/tests/lltranslate_test.cpp b/indra/newview/tests/lltranslate_test.cpp index 10e37fae97..fd9527d631 100644 --- a/indra/newview/tests/lltranslate_test.cpp +++ b/indra/newview/tests/lltranslate_test.cpp @@ -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) {} diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index d1c952ac3b..04118a5c87 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -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] @@ -1062,7 +1063,6 @@ class Linux_i686Manifest(LinuxManifest):              self.path("libalut.so")              self.path("libopenal.so", "libopenal.so.1")              self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname -              # KLUDGE: As of 2012-04-11, the 'fontconfig' package installs              # libfontconfig.so.1.4.4, along with symlinks libfontconfig.so.1              # and libfontconfig.so. Before we added support for library-file @@ -1081,7 +1081,13 @@ class Linux_i686Manifest(LinuxManifest):              # previous call did, without having to explicitly state the              # version number.              self.path("libfontconfig.so.*.*") -            self.path("libtcmalloc.so*") #formerly called google perf tools +            try: +                self.path("libtcmalloc.so*") #formerly called google perf tools +                pass +            except: +                print "tcmalloc files not found, skipping" +                pass +              try:                      self.path("libfmod-3.75.so")                      pass diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp index 4da774a5f6..5edbbf9914 100644 --- a/indra/viewer_components/updater/llupdatechecker.cpp +++ b/indra/viewer_components/updater/llupdatechecker.cpp @@ -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, diff --git a/indra/viewer_components/updater/llupdatechecker.h b/indra/viewer_components/updater/llupdatechecker.h index d882169068..23f62a7c5e 100644 --- a/indra/viewer_components/updater/llupdatechecker.h +++ b/indra/viewer_components/updater/llupdatechecker.h @@ -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;  }; | 
