summaryrefslogtreecommitdiffstats
path: root/logd/FlushCommand.cpp
Commit message (Collapse)AuthorAgeFilesLines
* logd: rework logic for LogTimeEntryTom Cherry2018-10-121-21/+2
| | | | | | | | | | | | | | | | | | | | | | LogTimeEntry's lifecycle is spread out in various locations. It further seems incomplete as there is logic that assumes that its associated thread can exit while the underlying LogTimeEntry remains valid, however it doesn't appear that that is actually a supported situation. This change simplifies this logic to have only one valid state for a LogTimeEntry: it must have its thread running and be present in LastLogTimes. A LogTimeEntry will never be placed into LastLogTimes unless its thread is running and its thread will remove its associated LogTimeEntry from LastLogTimes before it has exited. This admittedly breaks situations where a blocking socket gets issued multiple commands with different pid filters, tail lines, etc, however, I'm reasonably sure that these situations were already broken. A check is added to close the socket in this case. Test: multiple logcat instances work, logd.reader.per's are cleaned up Change-Id: Ibe8651e7d530c5e9a8d6ce3150cd247982887cbe
* [logd] Modernize codebase by replacing NULL with nullptrYi Kong2018-07-131-1/+1
| | | | | | | | Fixes -Wzero-as-null-pointer-constant warning. Test: m Bug: 68236239 Change-Id: I15ccb9cfc9967dae4320d9690f5097bc2f7d5bfe
* Remove execute bit for source filesYi Kong2018-07-131-0/+0
| | | | | Test: ls -l Change-Id: Id09514a03f82c89e6350a5f9e34b9ef8bfe27b7e
* logd: enhance multiple blocking readers performanceHao Wang2017-12-051-12/+4
| | | | | | | | | | | | | | | | | | | | | | logd suffers performance degradation when multiple blocking readers connect to it. Each time when the writer thread log new entries, all of the readers are notified regardless of which log id they are watching. In this case, only give notification to the readers who are actually watching new entries' log id. This decreases logd CPU consumption by skipping unnecessary LogBuffer::flushTo loops. Test: liblog-unit-tests, logd-unit-tests & CtsLiblogTestCases logcat-unit-tests Test: manual: 1.'logcat –b all' at constant heavy logging load level 2.simultaneously 'logcat –b crash' in another session, a healthy crash buffer usually keep empty 3.logd CPU consumption doesn't increase after step 2 Change-Id: I4ffc045c9feb7a0998f7e47ae2173f8f6aa28e8a
* logd: reader/writer element locksMark Salyzyn2017-04-201-2/+2
| | | | | | | | | | | | | | | | | Switch to a reader writer lock for the Element List lock. Also setup for a reader writer lock for the Times list, but continue to use a mutex where rdlock() and wrlock() are the same implementation for now. This should improve general reader performance and prevent blocking of other reader operations or exit by a single hung logd.reader.per thread. For example, a full length logcat of an empty buffer (eg: crash log buffer) will hold a lock while the iterator scans the entire list. Test: gTest liblog-unit-tests, logd-unit-tests, logcat-unit-tests Bug: 37378309 Bug: 37483775 Change-Id: If5723ff4a978e17d828a75321e8f0ba91d4a09e0
* logd: wakeup wrap timeout if realtime changes drasticallyMark Salyzyn2017-03-171-2/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | --wrap flag in logcat translates directly to the mTimeout inside logd, the value set is ANDROID_LOG_WRAP_DEFAULT_TIMEOUT defined in <log/log_read.h> as 7200 or 2 hours. For a non blocking read with a selected timeout, the logger waits until either the log buffer is about to 'wrap' and prune the log entry, or at the specified timeout. Non blocking in the logger context means that when there are no more log entries, the socket is closed. clock_gettime(CLOCK_REALTIME) is UTC 1970 epoch *NIX time. Is only affected for time updates, not timezone or daylight savings time. If there is a large user initiated time change, both the log entries and the timeout mentioned above really get called into question, so we trigger a release of the logs for clarity. This is so that the log reader can handle the disruptively updated time, and can immediately check the local time if necessary. The logger has a 5 second window for entries to land in time sorted order into the logging list. This should offer the log reader some differentiation between logging order sequence for monotonically increasing time, and sequence order in the face of user initiated time adjustments that break monotonicity. This change is about major time adjustments that can cause Fear, Uncertainty or Doubt about log entries. By returning, immediate action can be taken, rather than having to comb through the logs with less details about the time disruptions in hand. The least it can do is record what we have, and restart the call with a new tail time and timeout. Test: gTest liblog-unit-tests logcat-unit-test logd-unit-tests Bug: 35373582 Change-Id: I92cac83be99d68634ffd4ebd2f3a3067cfd0e942
* logd: drop mSequence from LogBufferElementMark Salyzyn2017-03-161-2/+2
| | | | | | | | | | Use getRealTime() instead and leverage private liblog log_time comparison and math functions. This saves 8 bytes off each element in the logging database. Test: gTest liblog-unit-tests logd-unit-tests logcat-unit-tests Bug: 35373582 Change-Id: Ia55ef8b95cbb2a841ccb1dae9a24f314735b076a
* logd: specify clang formatMark Salyzyn2017-03-131-22/+18
| | | | | | | | | Switch _all_ file's coding style to match to ease all future changes. SideEffects: None Test: compile Bug: 35373582 Change-Id: I470cb17f64fa48f14aafc02f574e296bffe3a3f3
* logd: Allow (some) headers to be individually importableMark Salyzyn2016-02-241-0/+3
| | | | | | | | | | | | LogReader.h needs to be individually importable. Fix a few others, drop includes of local includes, let them be included in source instead and allow headers to be included alphabetically. Was not a complete audit since goal was to separate LogReader.h out from the pack. Bug: 27242723 Change-Id: Ic7759ef90995e5bd285810706af33550c73cf5b5
* logd: security buffer only AID_SYSTEM readerMark Salyzyn2016-02-011-0/+8
| | | | | | | | | | | | | | | | - limit AID_SYSTEM uid or gid to read security buffer messages - adjust liblog tests to reflect the reality of this adjustment To fully test all security buffer paths and modes $ su 0,0,0 /data/nativetest/liblog-unit-tests/liblog-unit-tests --gtest_filter=liblog.__security* $ su 1000,1000,1000 /data/nativetest/liblog-unit-tests/liblog-unit-tests --gtest_filter=liblog.__security* $ su 2000,2000,2000 /data/nativetest/liblog-unit-tests/liblog-unit-tests --gtest_filter=liblog.__security* ToDo: Integrate the above individually into the gTest Q/A testing Bug: 26029733 Change-Id: Idcf5492db78fa6934ef6fb43f3ef861052675651
* logd: wrap timed entry too early, timeout immediatelyMark Salyzyn2016-01-071-1/+1
| | | | | Bug: 26447386 Change-Id: I8d5588831f558061ef21b2a5aeedc865e9ae4cc7
* logd: liblog: logcat: Add LOG_ID_SECURITYMark Salyzyn2015-12-081-0/+1
| | | | | | | | | | | | | | - Largish commit, buffer and access controls done together - Add LOG_ID_SECURITY binary content log - Add "default" meta buffer - allow LOG_ID_SECURITY only from AID_SYSTEM and AID_ROOT UID & GID - Use __android_log_security() to gate logging - Add __android_log_security_bwrite() native access to security logging. - Add liblog.__security_buffer end-to-end gTest Bug: 26029733 Change-Id: Ibcf5b4660c17c1aa6902c0d93f8ffd29c93d9a93
* logd: wakeup on wrap or timeoutMark Salyzyn2015-12-071-3/+10
| | | | | | | | | | If a timeout is specified for the reader, then go to sleep with the socket open. If the start time is about to get pruned in the specified log buffers, then wakeup and dump the logs; or wakeup on timeout, whichever comes first. Bug: 25929746 Change-Id: I7d2421c2c5083b33747b84f74d9a560d3ba645df
* logd: logtimes switch to std::listMark Salyzyn2015-08-201-1/+1
| | | | | Bug: 23350706 Change-Id: Icc60dd06119ea20a22610644ff880d5135363aba
* logd: CleanupMark Salyzyn2015-05-121-8/+8
| | | | | | | - Android Coding Standard for Constructors - Side effects NONE Change-Id: I2cda9dd73f3ac3ab58f394015cb810820093d47b
* logd: replace internal CLOCK_MONOTONIC use with sequence numbersMark Salyzyn2015-03-181-1/+1
| | | | | | | | | - switch to simpler and faster internal sequence number, drops a syscall overhead on 32-bit platforms. - add ability to break-out of flushTo loop with filter return -1 allowing in reduction in reader overhead. Change-Id: Ic5cb2b9afa4d9470153971fc9197b07279e2b79d
* logd: liblog: logcat: Arbitrary time to tailMark Salyzyn2014-03-141-2/+4
| | | | Change-Id: I10e8d92c933e31ee11e78d2d1114261a30c4be0e
* logd: institute getGroups for socket credentialsMark Salyzyn2014-02-281-6/+5
| | | | | | (cherry pick from commit 4d851290fc81eb36d2fcf76e6f06213a28b877f5) Change-Id: Ib8be84d2a3f873e91fb1495df439a498f395c137
* logd: Adjust to match defacto coding styleMark Salyzyn2014-02-261-2/+2
| | | | | | (cherry picked from commit c46f77bd2ad01f3a695416c4cf22d6a9738bb7b8) Change-Id: I80685cdc7116e10c5a5a77abe856fd96804f9117
* logd: initial checkin.Mark Salyzyn2014-02-261-0/+86
* Create a new userspace log daemon for handling logging messages. Original-Change-Id: I75267df16359684490121e6c31cca48614d79856 Signed-off-by: Nick Kralevich <nnk@google.com> * Merge conflicts * rename new syslog daemon to logd to prevent confusion with bionic syslog * replace racy getGroups call with KISS call to client->getGid() * Timestamps are filed at logging source * insert entries into list in timestamp order * Added LogTimeEntry tail filtration handling * Added region locking around LogWriter list * separate threads for each writer * /dev/socket/logd* permissions Signed-off-by: Mark Salyzyn <salyzyn@google.com> (cherry picked from commit 3e76e0a49760c4970b7cda6153e51026af98e4f3) Author: Nick Kralevich <nnk@google.com> Change-Id: Ice88b1412d8f9daa7f9119b2b5aaf684a5e28098