Merge "logd: mLastWorstPidOFSystem crash"

am: c75a32aae3

Change-Id: Ief8a0847243a0f2661192325efac5ce965dde92a
This commit is contained in:
Mark Salyzyn 2016-10-21 20:17:59 +00:00 committed by android-build-merger
commit ead6503178
1 changed files with 13 additions and 2 deletions

View File

@ -222,6 +222,9 @@ LogBufferElementCollection::iterator LogBuffer::erase(
LogBufferElement *element = *it;
log_id_t id = element->getLogId();
// Remove iterator references in the various lists that will become stale
// after the element is erased from the main logging list.
{ // start of scope for found iterator
int key = ((id == LOG_ID_EVENTS) || (id == LOG_ID_SECURITY)) ?
element->getTag() : element->getUid();
@ -231,7 +234,8 @@ LogBufferElementCollection::iterator LogBuffer::erase(
}
}
if ((id != LOG_ID_EVENTS) && (id != LOG_ID_SECURITY) && (element->getUid() == AID_SYSTEM)) {
if ((id != LOG_ID_EVENTS) && (id != LOG_ID_SECURITY)) {
// element->getUid() may not be AID_SYSTEM for next-best-watermark.
// start of scope for pid found iterator
LogBufferPidIteratorMap::iterator found =
mLastWorstPidOfSystem[id].find(element->getPid());
@ -501,7 +505,7 @@ bool LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
it = found->second;
}
}
if (worstPid) {
if (worstPid) { // Only set if !LOG_ID_EVENTS and !LOG_ID_SECURITY
// begin scope for pid worst found iterator
LogBufferPidIteratorMap::iterator found
= mLastWorstPidOfSystem[id].find(worstPid);
@ -534,6 +538,7 @@ bool LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
++it;
continue;
}
// below this point element->getLogId() == id
if (leading && (!mLastSet[id] || ((*mLast[id])->getLogId() != id))) {
mLast[id] = it;
@ -590,6 +595,8 @@ bool LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
&& ((!gc && (element->getPid() == worstPid))
|| (mLastWorstPidOfSystem[id].find(element->getPid())
== mLastWorstPidOfSystem[id].end()))) {
// element->getUid() may not be AID_SYSTEM, next best
// watermark if current one empty.
mLastWorstPidOfSystem[id][element->getPid()] = it;
}
if ((!gc && !worstPid && (key == worst))
@ -607,6 +614,8 @@ bool LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
++it;
continue;
}
// key == worst below here
// If worstPid set, then element->getPid() == worstPid below here
pruneRows--;
if (pruneRows == 0) {
@ -630,6 +639,8 @@ bool LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
if (worstPid && (!gc
|| (mLastWorstPidOfSystem[id].find(worstPid)
== mLastWorstPidOfSystem[id].end()))) {
// element->getUid() may not be AID_SYSTEM, next best
// watermark if current one empty.
mLastWorstPidOfSystem[id][worstPid] = it;
}
if ((!gc && !worstPid) ||