Bug 1476405: Part 5 - Create nsThread wrapper and use reasonable stack size for BackgroundHangMonitor. r?erahm
BackgroundHangMonitor is a special snowflake, and uses PR_CreateThread
directly, for some reason.
MozReview-Commit-ID: 2Qg28EqDwM7
--- a/toolkit/components/backgroundhangmonitor/BackgroundHangMonitor.cpp
+++ b/toolkit/components/backgroundhangmonitor/BackgroundHangMonitor.cpp
@@ -64,16 +64,19 @@ namespace mozilla {
*/
class BackgroundHangManager : public nsIObserver
{
private:
// Background hang monitor thread function
static void MonitorThread(void* aData)
{
AUTO_PROFILER_REGISTER_THREAD("BgHangMonitor");
+ // Create an nsThread wrapper for the thread and register it with the thread
+ // manager.
+ Unused << NS_GetCurrentThread();
NS_SetCurrentThreadName("BHMgr Monitor");
/* We do not hold a reference to BackgroundHangManager here
because the monitor thread only exists as long as the
BackgroundHangManager instance exists. We stop the monitor
thread in the BackgroundHangManager destructor, and we can
only get to the destructor if we don't hold a reference here. */
static_cast<BackgroundHangManager*>(aData)->RunMonitorThread();
@@ -263,17 +266,18 @@ BackgroundHangManager::BackgroundHangMan
: mShutdown(false)
, mLock("BackgroundHangManager")
{
// Lock so we don't race against the new monitor thread
MonitorAutoLock autoLock(mLock);
mHangMonitorThread = PR_CreateThread(
PR_USER_THREAD, MonitorThread, this,
- PR_PRIORITY_LOW, PR_GLOBAL_THREAD, PR_JOINABLE_THREAD, 0);
+ PR_PRIORITY_LOW, PR_GLOBAL_THREAD, PR_JOINABLE_THREAD,
+ nsIThreadManager::DEFAULT_STACK_SIZE);
MOZ_ASSERT(mHangMonitorThread, "Failed to create BHR monitor thread");
DebugOnly<nsresult> rv
= NS_NewNamedThread("BHMgr Processor",
getter_AddRefs(mHangProcessingThread));
MOZ_ASSERT(NS_SUCCEEDED(rv) && mHangProcessingThread,
"Failed to create BHR processing thread");