da6495d06f
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> |
||
---|---|---|
.. | ||
tests | ||
Android.mk | ||
CommandListener.cpp | ||
CommandListener.h | ||
FlushCommand.cpp | ||
FlushCommand.h | ||
LogAudit.cpp | ||
LogAudit.h | ||
LogBuffer.cpp | ||
LogBuffer.h | ||
LogBufferElement.cpp | ||
LogBufferElement.h | ||
LogCommand.cpp | ||
LogCommand.h | ||
LogListener.cpp | ||
LogListener.h | ||
LogReader.cpp | ||
LogReader.h | ||
LogStatistics.cpp | ||
LogStatistics.h | ||
LogTimes.cpp | ||
LogTimes.h | ||
LogWhiteBlackList.cpp | ||
LogWhiteBlackList.h | ||
README.auditd | ||
README.property | ||
event.logtags | ||
libaudit.c | ||
libaudit.h | ||
main.cpp |
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.