| Index: fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
|
| diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
|
| index 03f1cfc3581e77896c1d1bc9a4793250a2d916e1..c2a0db022c16be625ee8c96dbf45437b48bb778c 100644
|
| --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
|
| +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
|
| @@ -8,7 +8,7 @@
|
| #include "fpdfsdk/include/fsdk_define.h"
|
| #include "fpdfsdk/include/fsdk_mgr.h"
|
|
|
| -std::vector<CFWL_TimerInfo*> CXFA_FWLAdapterTimerMgr::s_TimerArray;
|
| +std::vector<CFWL_TimerInfo*>* CXFA_FWLAdapterTimerMgr::s_TimerArray = nullptr;
|
|
|
| FWL_ERR CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer,
|
| FX_DWORD dwElapse,
|
| @@ -18,8 +18,10 @@ FWL_ERR CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer,
|
| return FWL_ERR_Indefinite;
|
|
|
| uint32_t uIDEvent = m_pEnv->FFI_SetTimer(dwElapse, TimerProc);
|
| - s_TimerArray.push_back(new CFWL_TimerInfo(uIDEvent, pTimer));
|
| - hTimer = reinterpret_cast<FWL_HTIMER>(s_TimerArray.back());
|
| + if (!s_TimerArray)
|
| + s_TimerArray = new std::vector<CFWL_TimerInfo*>;
|
| + s_TimerArray->push_back(new CFWL_TimerInfo(uIDEvent, pTimer));
|
| + hTimer = reinterpret_cast<FWL_HTIMER>(s_TimerArray->back());
|
| return FWL_ERR_Succeeded;
|
| }
|
|
|
| @@ -29,16 +31,22 @@ FWL_ERR CXFA_FWLAdapterTimerMgr::Stop(FWL_HTIMER hTimer) {
|
|
|
| CFWL_TimerInfo* pInfo = reinterpret_cast<CFWL_TimerInfo*>(hTimer);
|
| m_pEnv->FFI_KillTimer(pInfo->uIDEvent);
|
| - auto it = std::find(s_TimerArray.begin(), s_TimerArray.end(), pInfo);
|
| - if (it != s_TimerArray.end()) {
|
| - s_TimerArray.erase(it);
|
| - delete pInfo;
|
| + if (s_TimerArray) {
|
| + auto it = std::find(s_TimerArray->begin(), s_TimerArray->end(), pInfo);
|
| + if (it != s_TimerArray->end()) {
|
| + s_TimerArray->erase(it);
|
| + delete pInfo;
|
| + }
|
| }
|
| return FWL_ERR_Succeeded;
|
| }
|
|
|
| +// static
|
| void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) {
|
| - for (CFWL_TimerInfo* pInfo : s_TimerArray) {
|
| + if (!s_TimerArray)
|
| + return;
|
| +
|
| + for (CFWL_TimerInfo* pInfo : *s_TimerArray) {
|
| if (pInfo->uIDEvent == idEvent) {
|
| pInfo->pTimer->Run(reinterpret_cast<FWL_HTIMER>(pInfo));
|
| break;
|
|
|