Address deadlock am: d401baa236

am: 2d7e47508b

Change-Id: Iffe367f44be7049b013ce1fda7394de924dd83ae
This commit is contained in:
Rahul Frias
2018-05-30 00:06:13 -07:00
committed by android-build-merger

View File

@@ -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;
}
} }
} }
} }