diff options
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.h | 7 | 
2 files changed, 27 insertions, 6 deletions
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index edb1680eb7..2864619224 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -548,8 +548,9 @@ LLViewerFetchedTexture* LLMeshUploadThread::FindViewerTexture(const LLImportMate      return ppTex ? (*ppTex).get() : NULL;  } -volatile S32 LLMeshRepoThread::sActiveHeaderRequests = 0; -volatile S32 LLMeshRepoThread::sActiveLODRequests = 0; +std::atomic<S32> LLMeshRepoThread::sActiveHeaderRequests = 0; +std::atomic<S32> LLMeshRepoThread::sActiveLODRequests = 0; +std::atomic<S32> LLMeshRepoThread::sActiveSkinRequests = 0;  U32 LLMeshRepoThread::sMaxConcurrentRequests = 1;  S32 LLMeshRepoThread::sRequestLowWater = REQUEST2_LOW_WATER_MIN;  S32 LLMeshRepoThread::sRequestHighWater = REQUEST2_HIGH_WATER_MIN; @@ -674,7 +675,9 @@ public:      LLMeshSkinInfoHandler(const LLUUID& id, U32 offset, U32 requested_bytes)          : LLMeshHandlerBase(offset, requested_bytes),            mMeshID(id) -    {} +    { +        LLMeshRepoThread::incActiveSkinRequests(); +    }      virtual ~LLMeshSkinInfoHandler();  protected: @@ -1701,6 +1704,20 @@ void LLMeshRepoThread::decActiveHeaderRequests()      --LLMeshRepoThread::sActiveHeaderRequests;  } +//static +void LLMeshRepoThread::incActiveSkinRequests() +{ +    LLMutexLock lock(gMeshRepo.mThread->mMutex); +    ++LLMeshRepoThread::sActiveSkinRequests; +} + +//static +void LLMeshRepoThread::decActiveSkinRequests() +{ +    LLMutexLock lock(gMeshRepo.mThread->mMutex); +    --LLMeshRepoThread::sActiveSkinRequests; +} +  //return false if failed to get header  bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params, bool can_retry)  { @@ -3448,6 +3465,7 @@ LLMeshSkinInfoHandler::~LLMeshSkinInfoHandler()      {          LL_WARNS(LOG_MESH) << "deleting unprocessed request handler (may be ok on exit)" << LL_ENDL;      } +    LLMeshRepoThread::decActiveSkinRequests();  }  void LLMeshSkinInfoHandler::processFailure(LLCore::HttpStatus status) @@ -4014,7 +4032,7 @@ void LLMeshRepository::notifyLoadedMeshes()              mUploadErrorQ.pop();          } -        S32 active_count = LLMeshRepoThread::sActiveHeaderRequests + LLMeshRepoThread::sActiveLODRequests; +        S32 active_count = LLMeshRepoThread::sActiveHeaderRequests + LLMeshRepoThread::sActiveLODRequests + LLMeshRepoThread::sActiveSkinRequests;          if (active_count < LLMeshRepoThread::sRequestLowWater)          {              S32 push_count = LLMeshRepoThread::sRequestHighWater - active_count; diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 449708779b..7c0676255e 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -328,8 +328,9 @@ class LLMeshRepoThread : public LLThread  {  public: -    volatile static S32 sActiveHeaderRequests; -    volatile static S32 sActiveLODRequests; +    static std::atomic<S32> sActiveHeaderRequests; +    static std::atomic<S32> sActiveLODRequests; +    static std::atomic<S32> sActiveSkinRequests;      static U32 sMaxConcurrentRequests;      static S32 sRequestLowWater;      static S32 sRequestHighWater; @@ -499,6 +500,8 @@ public:      static void decActiveLODRequests();      static void incActiveHeaderRequests();      static void decActiveHeaderRequests(); +    static void incActiveSkinRequests(); +    static void decActiveSkinRequests();      // Set the caps strings and preferred version for constructing      // mesh fetch URLs.  | 
