logd: deal with sloppy leading expire messages

The odds of chatty content also leading the logs is pretty high eg:

 1799 12017 I logd: uid=10007 chatty comm=Binder_B, expire 4 lines
 1799  1829 I logd: uid=10007 chatty comm=Binder_2, expire 4 lines
 1919 20637 I logd: uid=10007 chatty comm=m.sersistent, expire 1 line
 1919 20638 I logd: uid=10007 chatty comm=s.persistent, expire 1 line
 1919  2316 I logd: uid=10007 chatty comm=UlrDispatch, expire 4 lines
19379 20634 I logd: uid=10045 chatty, expire 14 lines
19379 19388 I logd: uid=10045 chatty comm=lizerDaemon, expire 4 lines
  591  4396 I logd: uid=1000 chatty comm=Thread-220, expire 5 lines
  591  1377 I logd: uid=1000 chatty comm=Thread-92, expire 4 lines
 1919  2267 I logd: uid=10007 chatty comm=WifiScanner, expire 4 lines
  591  4397 I logd: uid=1000 chatty comm=DhcpClient, expire 4 lines
  591  4398 I logd: uid=1000 chatty comm=Thread-222, expire 4 lines
  226   580 D CommandListener: Setting iface cfg

Change-Id: I5ab24bc7bf5d2690bae7e789831b07f23ff8bcc6
This commit is contained in:
Mark Salyzyn 2015-05-22 10:03:31 -07:00
parent ce817c38d2
commit 5392aac95d
1 changed files with 15 additions and 10 deletions

View File

@ -417,8 +417,6 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
continue;
}
leading = false;
if (hasBlacklist && mPrune.naughty(e)) {
last.clear(e);
it = erase(it);
@ -448,6 +446,7 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
}
if (e->getUid() != worst) {
leading = false;
if (start != log_time::EPOCH) {
static const timespec too_old = {
EXPIRE_HOUR_THRESHOLD * 60 * 60, 0
@ -479,15 +478,21 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
kick = true;
unsigned short len = e->getMsgLen();
stats.drop(e);
e->setDropped(1);
if (last.merge(e, 1)) {
it = mLogElements.erase(it);
stats.erase(e);
delete e;
// do not create any leading drops
if (leading) {
it = erase(it);
} else {
last.add(e);
++it;
stats.drop(e);
e->setDropped(1);
if (last.merge(e, 1)) {
it = mLogElements.erase(it);
stats.erase(e);
delete e;
} else {
last.add(e);
++it;
}
}
if (worst_sizes < second_worst_sizes) {
break;