diff options
| -rw-r--r-- | indra/llcommon/threadpool.cpp | 12 | ||||
| -rw-r--r-- | indra/llcommon/threadpool.h | 3 | ||||
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 3 | 
3 files changed, 14 insertions, 4 deletions
diff --git a/indra/llcommon/threadpool.cpp b/indra/llcommon/threadpool.cpp index d5adf11264..22bbff4478 100644 --- a/indra/llcommon/threadpool.cpp +++ b/indra/llcommon/threadpool.cpp @@ -21,11 +21,12 @@  #include "llevents.h"  #include "stringize.h" -LL::ThreadPool::ThreadPool(const std::string& name, size_t threads, size_t capacity): +LL::ThreadPool::ThreadPool(const std::string& name, size_t threads, size_t capacity, bool auto_shutdown):      super(name),      mQueue(name, capacity),      mName("ThreadPool:" + name), -    mThreadCount(threads) +    mThreadCount(threads), +    mAutomaticShutdown(auto_shutdown)  {}  void LL::ThreadPool::start() @@ -39,6 +40,13 @@ void LL::ThreadPool::start()                  run(tname);              });      } + +    // Some threads might need to run longer than LLEventPumps +    if (!mAutomaticShutdown) +    { +        return; +    } +      // Listen on "LLApp", and when the app is shutting down, close the queue      // and join the workers.      LLEventPumps::instance().obtain("LLApp").listen( diff --git a/indra/llcommon/threadpool.h b/indra/llcommon/threadpool.h index f8eec3b457..22c875edb9 100644 --- a/indra/llcommon/threadpool.h +++ b/indra/llcommon/threadpool.h @@ -31,7 +31,7 @@ namespace LL           * Pass ThreadPool a string name. This can be used to look up the           * relevant WorkQueue.           */ -        ThreadPool(const std::string& name, size_t threads=1, size_t capacity=1024); +        ThreadPool(const std::string& name, size_t threads=1, size_t capacity=1024, bool auto_shutdown = true);          virtual ~ThreadPool();          /** @@ -66,6 +66,7 @@ namespace LL          std::string mName;          size_t mThreadCount;          std::vector<std::pair<std::string, std::thread>> mThreads; +        bool mAutomaticShutdown;      };  } // namespace LL diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 2e560ddb0a..01e38fcc9d 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -828,6 +828,7 @@ void LLWindowWin32::close()  	// Is window is already closed?  	if (!mWindowHandle)  	{ +        mWindowThread->close();  		return;  	} @@ -4590,7 +4591,7 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList()  #endif // LL_WINDOWS  inline LLWindowWin32::LLWindowWin32Thread::LLWindowWin32Thread() -    : ThreadPool("Window Thread", 1, MAX_QUEUE_SIZE) +    : ThreadPool("Window Thread", 1, MAX_QUEUE_SIZE, false)  {      ThreadPool::start();  }  | 
