XFA: merge patch from CL 831903002, m_sTimeMap fixes
Get rid of fifteen copies of m_sTimeMap and their initializers.
m_sTimeMap is a global variable with a constructor and destructor, which
is not allowed. This change moves it to a function with a static pointer
so that it is constructed on demand and then leaked, thus avoiding
having startup and shutdown code.
This also fixes a worrisome bug caused by having m_sTimeMap defined in
a header file. Because m_sTimeMap was defined (and marked as static) in
a header file there were fifteen separate copies of it, one for each
source file which included the header file. This could easily lead to
bugs because a timer that was added from one source file would be
invisible to other source files.
Each instance of m_sTimeMap added four entries to the
dump-static-initializers.py report, for a total of sixty, so this fix
significantly cleans up that report.
BUG=441899
TBR=tsepez@chromium.org
Review URL: https://codereview.chromium.org/831903002
Review URL: https://codereview.chromium.org/800883004
diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h
index ca6f4a1..7bdfcf1 100644
--- a/fpdfsdk/include/javascript/JS_Object.h
+++ b/fpdfsdk/include/javascript/JS_Object.h
@@ -157,7 +157,7 @@
CTimerMapArray m_Array;
};
-static JS_TIMER_MAPARRAY m_sTimeMap;
+JS_TIMER_MAPARRAY& GetTimeMap();
class CJS_Runtime;
@@ -188,7 +188,7 @@
if (m_nTimerID)KillJSTimer();
IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
m_nTimerID = pHandler->SetTimer(nElapse,TimerProc);
- m_sTimeMap.SetAt(m_nTimerID,this);
+ GetTimeMap().SetAt(m_nTimerID,this);
m_dwElapse = nElapse;
return m_nTimerID;
};
@@ -204,7 +204,7 @@
}
IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
pHandler->KillTimer(m_nTimerID);
- m_sTimeMap.RemoveAt(m_nTimerID);
+ GetTimeMap().RemoveAt(m_nTimerID);
m_nTimerID = 0;
}
};
@@ -261,7 +261,7 @@
static void TimerProc(int idEvent)
{
- if (CJS_Timer * pTimer = m_sTimeMap.GetAt(idEvent))
+ if (CJS_Timer * pTimer = GetTimeMap().GetAt(idEvent))
{
if (!pTimer->m_bProcessing)
{