diff --git a/libwvdrmengine/cdm/core/include/cdm_engine.h b/libwvdrmengine/cdm/core/include/cdm_engine.h index ca5487b9..96095c87 100644 --- a/libwvdrmengine/cdm/core/include/cdm_engine.h +++ b/libwvdrmengine/cdm/core/include/cdm_engine.h @@ -114,7 +114,7 @@ class CdmEngine : public TimerHandler { // timer related methods to drive policy decisions virtual void EnablePolicyTimer(); - virtual void DisablePolicyTimer(); + virtual void DisablePolicyTimer(bool force); virtual void OnTimerEvent(); virtual void OnKeyReleaseEvent(const CdmKeySetId& key_set_id); diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index ccfa0fcb..76543e34 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -29,6 +29,7 @@ CdmEngine::CdmEngine() CdmEngine::~CdmEngine() { CancelSessions(); + DisablePolicyTimer(true); CdmSessionMap::iterator i(sessions_.begin()); for (; i != sessions_.end(); ++i) delete i->second; @@ -98,9 +99,10 @@ CdmResponseType CdmEngine::CloseSession(const CdmSessionId& session_id) { return KEY_ERROR; } - delete iter->second; + CdmSession* session = iter->second; sessions_.erase(session_id); - DisablePolicyTimer(); + DisablePolicyTimer(false); + delete session; return NO_ERROR; } @@ -295,7 +297,7 @@ CdmResponseType CdmEngine::CancelKeyRequest(const CdmSessionId& session_id) { } // TODO(edwinwong, rfrias): unload keys here - DisablePolicyTimer(); + DisablePolicyTimer(false); return NO_ERROR; } @@ -675,8 +677,8 @@ void CdmEngine::EnablePolicyTimer() { policy_timer_.Start(this, kCdmPolicyTimerDurationSeconds); } -void CdmEngine::DisablePolicyTimer() { - if (sessions_.size() == 0 && policy_timer_.IsRunning()) +void CdmEngine::DisablePolicyTimer(bool force) { + if ((sessions_.size() == 0 || force) && policy_timer_.IsRunning()) policy_timer_.Stop(); }