Chromium Code Reviews| Index: fpdfsdk/javascript/JS_Object.cpp |
| diff --git a/fpdfsdk/javascript/JS_Object.cpp b/fpdfsdk/javascript/JS_Object.cpp |
| index b0a307beb11a368849c6fcdfeca548fc38ec9ea3..bef996505555da5c4c0ff3d20fba8a0d5ed0edcc 100644 |
| --- a/fpdfsdk/javascript/JS_Object.cpp |
| +++ b/fpdfsdk/javascript/JS_Object.cpp |
| @@ -115,16 +115,24 @@ 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. |
|
Lei Zhang
2016/08/04 19:02:40
Is it possible for a new timer with the same |idEv
Tom Sepez
2016/08/04 19:12:40
It's up to the embedder, and doesn't happen AFAICT
|
| + it = GetGlobalTimerMap()->find(idEvent); |
| + if (it == GetGlobalTimerMap()->end()) |
| + return; |
| + |
| + pTimer->m_bProcessing = false; |
| } |
| // static |