Address deadlock am: d401baa236
am: 2d7e47508b
Change-Id: Iffe367f44be7049b013ce1fda7394de924dd83ae
This commit is contained in:
@@ -1655,51 +1655,54 @@ void CdmEngine::OnTimerEvent() {
|
|||||||
bool is_initial_usage_update = false;
|
bool is_initial_usage_update = false;
|
||||||
bool is_usage_update_needed = false;
|
bool is_usage_update_needed = false;
|
||||||
|
|
||||||
AutoLock lock(session_map_lock_);
|
{
|
||||||
CdmSessionList sessions;
|
AutoLock lock(session_map_lock_);
|
||||||
session_map_.GetSessionList(sessions);
|
CdmSessionList sessions;
|
||||||
|
|
||||||
while (!sessions.empty()) {
|
|
||||||
is_initial_usage_update =
|
|
||||||
is_initial_usage_update || sessions.front()->is_initial_usage_update();
|
|
||||||
is_usage_update_needed =
|
|
||||||
is_usage_update_needed || sessions.front()->is_usage_update_needed();
|
|
||||||
|
|
||||||
sessions.front()->OnTimerEvent(usage_update_period_expired);
|
|
||||||
sessions.pop_front();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_usage_update_needed &&
|
|
||||||
(usage_update_period_expired || is_initial_usage_update)) {
|
|
||||||
bool has_usage_been_updated = false;
|
|
||||||
|
|
||||||
// Session list may have changed. Rebuild.
|
|
||||||
session_map_.GetSessionList(sessions);
|
session_map_.GetSessionList(sessions);
|
||||||
|
|
||||||
for (CdmSessionList::iterator iter = sessions.begin();
|
while (!sessions.empty()) {
|
||||||
iter != sessions.end(); ++iter) {
|
is_initial_usage_update =
|
||||||
(*iter)->reset_usage_flags();
|
is_initial_usage_update ||
|
||||||
switch ((*iter)->get_usage_support_type()) {
|
sessions.front()->is_initial_usage_update();
|
||||||
case kUsageEntrySupport:
|
is_usage_update_needed =
|
||||||
if ((*iter)->has_provider_session_token()) {
|
is_usage_update_needed || sessions.front()->is_usage_update_needed();
|
||||||
(*iter)->UpdateUsageEntryInformation();
|
|
||||||
}
|
sessions.front()->OnTimerEvent(usage_update_period_expired);
|
||||||
break;
|
sessions.pop_front();
|
||||||
case kUsageTableSupport:
|
}
|
||||||
if (!has_usage_been_updated) {
|
|
||||||
// usage is updated for all sessions so this needs to be
|
if (is_usage_update_needed &&
|
||||||
// called only once per update usage information period
|
(usage_update_period_expired || is_initial_usage_update)) {
|
||||||
CdmResponseType status = (*iter)->UpdateUsageTableInformation();
|
bool has_usage_been_updated = false;
|
||||||
if (NO_ERROR != status) {
|
|
||||||
LOGW("Update usage information failed: %d", status);
|
// Session list may have changed. Rebuild.
|
||||||
} else {
|
session_map_.GetSessionList(sessions);
|
||||||
has_usage_been_updated = true;
|
|
||||||
|
for (CdmSessionList::iterator iter = sessions.begin();
|
||||||
|
iter != sessions.end(); ++iter) {
|
||||||
|
(*iter)->reset_usage_flags();
|
||||||
|
switch ((*iter)->get_usage_support_type()) {
|
||||||
|
case kUsageEntrySupport:
|
||||||
|
if ((*iter)->has_provider_session_token()) {
|
||||||
|
(*iter)->UpdateUsageEntryInformation();
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case kUsageTableSupport:
|
||||||
default:
|
if (!has_usage_been_updated) {
|
||||||
// Ignore
|
// usage is updated for all sessions so this needs to be
|
||||||
break;
|
// called only once per update usage information period
|
||||||
|
CdmResponseType status = (*iter)->UpdateUsageTableInformation();
|
||||||
|
if (NO_ERROR != status) {
|
||||||
|
LOGW("Update usage information failed: %d", status);
|
||||||
|
} else {
|
||||||
|
has_usage_been_updated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Ignore
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user