Bug 1476405: Part 5 - Create nsThread wrapper and use reasonable stack size for BackgroundHangMonitor. r?erahm draft
authorKris Maglione <maglione.k@gmail.com>
Fri, 20 Jul 2018 13:31:14 -0700
changeset 821044 cb8d820ea2d8d990742e11dbb0b3c8407e9335d5
parent 821043 9144972b2bdcfb6239929c41df78cd443ed1e7b7
child 821045 7e62a32c5dc6382e9bba7730534952359167981b
push id116998
push usermaglione.k@gmail.com
push dateFri, 20 Jul 2018 20:53:25 +0000
reviewerserahm
bugs1476405
milestone63.0a1
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
toolkit/components/backgroundhangmonitor/BackgroundHangMonitor.cpp
--- 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");