| Index: fpdfsdk/javascript/JS_Object.cpp
|
| diff --git a/fpdfsdk/javascript/JS_Object.cpp b/fpdfsdk/javascript/JS_Object.cpp
|
| index b0a307beb11a368849c6fcdfeca548fc38ec9ea3..9ec316303dc3b4c0a2a8919ee92e04858365bad2 100644
|
| --- a/fpdfsdk/javascript/JS_Object.cpp
|
| +++ b/fpdfsdk/javascript/JS_Object.cpp
|
| @@ -115,16 +115,25 @@ void CJS_Timer::KillJSTimer() {
|
|
|
| // static
|
| void CJS_Timer::TimerProc(int idEvent) {
|
| - const auto it = GetGlobalTimerMap()->find(idEvent);
|
| - if (it != GetGlobalTimerMap()->end()) {
|
| - CJS_Timer* pTimer = it->second;
|
| - if (!pTimer->m_bProcessing) {
|
| - CFX_AutoRestorer<bool> scoped_processing(&pTimer->m_bProcessing);
|
| - pTimer->m_bProcessing = true;
|
| - if (pTimer->m_pEmbedObj)
|
| - pTimer->m_pEmbedObj->TimerProc(pTimer);
|
| - }
|
| - }
|
| + auto it = GetGlobalTimerMap()->find(idEvent);
|
| + if (it == GetGlobalTimerMap()->end())
|
| + return;
|
| +
|
| + CJS_Timer* pTimer = it->second;
|
| + if (pTimer->m_bProcessing)
|
| + return;
|
| +
|
| + pTimer->m_bProcessing = true;
|
| + if (pTimer->m_pEmbedObj)
|
| + pTimer->m_pEmbedObj->TimerProc(pTimer);
|
| +
|
| + // Timer proc may have destroyed timer, find it again.
|
| + it = GetGlobalTimerMap()->find(idEvent);
|
| + if (it == GetGlobalTimerMap()->end())
|
| + return;
|
| +
|
| + pTimer = it->second;
|
| + pTimer->m_bProcessing = false;
|
| }
|
|
|
| // static
|
|
|