android_system_core/logd
TraianX Schiau da6495d06f logd: Fix pruning
In a scenario in which an on-line (blocking) client is running and
a clean is attempted (logcat -c), the following can be observed:

1) the on-line logger seems to freeze
2) any other clear attempt will have no effect

What is actually happening:

In this case prune function will "instruct" the oldest timeEntry
to skip a huge number (very close to ULONG_MAX) of messages, this
being the cause of 1.

Since the consumer thread will skip all the log entries, mStart
updating will also be skipped. So a new cleaning attempt will have
the same oldest entry, nothing will be done.

Fix description:
a. keep a separated skipAhead count for individual log buffers (log_id_t)
      LogTimeEntry::LogTimeEntry
      LogTimeEntry::FilterSecondPass
      LogTimeEntry::skipAhead
      LogTimeEntry::riggerSkip_Locked

b. update LogTimeEntry::mStart even if the current message is skipped
      LogTimeEntry::FilterSecondPass

c. while pruning, only take into account the LogTimeEntrys that are monitoring
   the log_id in question, and provide a public method of checking this.
      LogTimeEntry::isWatching
      LogTimeEntry::FilterFirstPass
      LogTimeEntry::FilterSecondPass

d. Reset the skip cont befor the client thtread starts to sleep, at this point
   we should be up to date.
      LogTimeEntry::cleanSkip_Locked
      LogTimeEntry::threadStart

Change-Id: I1b369dc5b02476e633e52578266a644e37e188a5
Signed-off-by: TraianX Schiau <traianx.schiau@intel.com>
2015-01-14 19:12:47 +00:00
..
tests logd: fix format-extra-args warning. 2014-09-12 23:37:42 +00:00
Android.mk logd: logcat: debuggerd: auditd logs to events 2014-05-15 08:50:50 -07:00
CommandListener.cpp logd: Allow apps to clear their UID-specific data 2014-06-13 08:06:14 -07:00
CommandListener.h logd: libsysutils: logd startup outside init environment 2014-04-17 16:14:24 +00:00
FlushCommand.cpp logd: liblog: logcat: Arbitrary time to tail 2014-03-14 10:23:51 -07:00
FlushCommand.h logd: liblog: logcat: Arbitrary time to tail 2014-03-14 10:23:51 -07:00
LogAudit.cpp logd: auditd remove logDmesg method 2014-12-05 20:56:44 +00:00
LogAudit.h logd: auditd remove logDmesg method 2014-12-05 20:56:44 +00:00
LogBuffer.cpp logd: Fix pruning 2015-01-14 19:12:47 +00:00
LogBuffer.h logd: Add control statistics enable/disable. 2014-10-06 22:42:47 +00:00
LogBufferElement.cpp logd: liblog: Thread IDs missing from logcat -v thread 2014-03-21 10:37:44 -07:00
LogBufferElement.h logd: liblog: Thread IDs missing from logcat -v thread 2014-03-21 10:37:44 -07:00
LogCommand.cpp init: logd: Allow Developer settings to adjust logd size 2014-05-13 07:42:15 -07:00
LogCommand.h
LogListener.cpp logd: build breakage in git_master-nova @ 1151709 2014-05-02 15:47:24 -07:00
LogListener.h
LogReader.cpp logd: in nonblocking read, sched_yield() synchronization 2014-09-29 17:40:10 +00:00
LogReader.h logd: libsysutils: logd startup outside init environment 2014-04-17 16:14:24 +00:00
LogStatistics.cpp logd: LogStatistics leak 2014-10-06 22:43:56 +00:00
LogStatistics.h logd: Add control statistics enable/disable. 2014-10-06 22:42:47 +00:00
LogTimes.cpp logd: Fix pruning 2015-01-14 19:12:47 +00:00
LogTimes.h logd: Fix pruning 2015-01-14 19:12:47 +00:00
LogWhiteBlackList.cpp logd: fix format-extra-args warning. 2014-09-12 23:37:42 +00:00
LogWhiteBlackList.h logd: liblog: logcat: Add LogWhiteBlackList 2014-03-13 14:48:07 -07:00
README.auditd logd: selinux auditd initial commit 2014-04-07 10:51:00 -07:00
README.property logd: Add control statistics enable/disable. 2014-10-06 22:42:47 +00:00
event.logtags logd: logcat: debuggerd: auditd logs to events 2014-05-15 08:50:50 -07:00
libaudit.c logd: throttle SELinux denials to 20/sec 2014-11-19 13:35:36 -08:00
libaudit.h logd: throttle SELinux denials to 20/sec 2014-11-19 13:35:36 -08:00
main.cpp logd: auditd remove logDmesg method 2014-12-05 20:56:44 +00:00

README.property

The properties that logd responds to are:

name                       type default  description
logd.auditd                 bool  true   Enable selinux audit daemon
logd.auditd.dmesg           bool  true   selinux audit messages duplicated and
                                         sent on to dmesg log
logd.statistics             bool depends Enable logcat -S statistics.
ro.config.low_ram           bool  false  if true, logd.statistics default false
ro.build.type               string       if user, logd.statistics default false
logd.statistics.dgram_qlen  bool  false  Record dgram_qlen statistics. This
                                         represents a performance impact and
                                         is used to determine the platform's
                                         minimum domain socket network FIFO
                                         size (see source for details) based
                                         on typical load (logcat -S to view)
persist.logd.size          number 256K   default size of the buffer for all
                                         log ids at initial startup, at runtime
                                         use: logcat -b all -G <value>
persist.logd.size.main     number 256K   Size of the buffer for the main log
persist.logd.size.system   number 256K   Size of the buffer for the system log
persist.logd.size.radio    number 256K   Size of the buffer for the radio log
persist.logd.size.event    number 256K   Size of the buffer for the event log
persist.logd.size.crash    number 256K   Size of the buffer for the crash log

NB:
- number support multipliers (K or M) for convenience. Range is limited
  to between 64K and 256M for log buffer sizes. Individual logs override the
  global default.