No description
Find a file
Tom Cherry 953c0deadb base: reimagine line splitting in logger.cpp
Previously, we would split messages by line and call the logger
function for each line.  We would hold a lock during this, to ensure
that multiple threads would not interleave their messages.

There are a few problems with this approach:
1) Using a lock is not efficient and is not fork safe
2) With APEX, there is one lock per instance of libbase, so we must
   move the lock to a location where all instances can access it, or
   perform the line splitting in a way that does not require the lock.

To solve these issues, we reimagine line splitting.
1) We move the lock out of the LogMessage::~LogMessage() and make it
   the logger's responsibility to split lines, giving the logger the
   option to lock or not.
2) We do not need any locks at all for StderrLogger.
   Instead, we generate a single string that contains all of the lines
   with their appropriate log header.  A single write() call is used
   to output this at once.
3) Logd handles log messages with newlines correctly, however it only
   accepts up to a maximum size of log message.  Therefore we
   separate the incoming log message into chunks, delimited by new
   lines, up to that maximum size, and send each of those to logd.
   Note that this is the strategy used in
   android.util.Log.printlns().
   This should solve a majority of use cases, since the maximum size
   that logd accepts is nearly 4K, while remaining lock free.
   If interleaving messages absolutely must be avoided, a lock can
   still be used given 1) above.

Bug: 65062446
Bug: 153824050
Test: logging, particularly multi-line stack traces, show correctly
Test: existing and new unit tests
Change-Id: Id0cb5669bee7f912da1e17f7010f0ee4c93be1e3
(cherry picked from commit 36d31c530d)
2020-04-27 16:25:27 -07:00
adb adb: Avoid extra string construction 2020-04-21 20:34:44 -07:00
base base: reimagine line splitting in logger.cpp 2020-04-27 16:25:27 -07:00
bootstat Improve logging in bootstat. 2020-04-02 20:07:04 +01:00
cli-test cli-test: a tool for testing command-line programs. 2019-12-13 12:23:51 -08:00
code_coverage build code_coverage.policy with Android.bp 2020-02-11 10:33:38 -08:00
cpio Switch from dist-for-goals to dist in Android.bp 2018-11-19 23:06:12 -08:00
debuggerd Remove use of static libdexfile to avoid linking in ART internal code. 2020-03-24 21:48:00 +00:00
deprecated-adf remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
diagnose_usb Set apex_available property 2020-04-20 16:07:35 +09:00
fastboot Rename vts-core to vts 2020-04-06 16:11:29 -07:00
fs_mgr Merge "Convert vts configs to Android.bp" into rvc-dev 2020-04-27 17:05:10 +00:00
gatekeeperd Remove libhwbinder/libhidltransport deps 2019-09-05 14:17:42 -07:00
healthd BatteryMonitor: report current_now in uA 2020-04-09 14:41:51 -07:00
include Move android_filesystem_config.h => fs_config.h 2017-08-02 16:31:19 -07:00
init Merge "Add /mnt/androidwritable for MOUNT_EXTERNAL_ANDROID_WRITABLE apps" into rvc-dev 2020-04-21 11:08:07 +00:00
janitors Add the two best build system janitors. 2019-03-25 10:25:13 -07:00
libappfuse Close /dev/fuse FD before calling onClosed 2019-05-31 17:06:52 +01:00
libasyncio Set apex_available property 2020-04-20 16:07:35 +09:00
libbacktrace Set apex_available property 2020-04-20 16:06:02 +09:00
libbinderwrapper Make libbinderwrapper available in /vendor partition 2018-04-06 08:41:21 +09:00
libcrypto_utils Set apex_available property 2020-04-20 16:06:02 +09:00
libcutils Set apex_available property 2020-04-20 16:06:02 +09:00
libdiskconfig Rename target.linux[_x86[_64]] to target.linux_glibc[_x86[_64]] 2017-10-02 10:44:29 -07:00
libgrallocusage Replace -Weverything with -Wextra 2019-11-08 13:09:00 -08:00
libkeyutils Refactor mini-keyctl and split a static library 2019-09-26 10:45:38 -07:00
liblog Remove thread safety from libbase logging / liblog 2020-04-23 10:33:03 -07:00
libmodprobe first_stage_init: load modules in modules.load.recovery in recovery 2020-04-08 10:49:13 -07:00
libnetutils add nodad argument to ifc_act_on_address() and add it to header file 2020-01-26 06:35:30 -08:00
libpackagelistparser Add require_root to adbd_test and libpackagelistparser_test 2019-09-24 09:13:32 -07:00
libprocessgroup Convert vts configs to Android.bp 2020-04-27 16:36:53 +00:00
libprocinfo libprocinfo: remove error msg for unknown process state. 2020-01-17 15:55:13 -08:00
libqtaguid Redirect qtaguid native call to netd fwmark client 2017-11-09 18:02:22 -08:00
libsparse Make ramdisk_available. 2020-01-22 16:47:14 -08:00
libstats Add require root to libstats tests 2020-04-24 10:44:25 -07:00
libsuspend Remove libsuspend from VNDK. 2018-08-14 13:39:55 -07:00
libsync Rename # vndk tag to # llndk 2019-11-13 14:32:44 +09:00
libsystem Set apex_available property 2020-04-20 16:06:02 +09:00
libsysutils NetlinkEvent - ignore captive portal and pref64 nd user opts 2020-04-03 01:01:15 +00:00
libunwindstack Remove use of static libdexfile to avoid linking in ART internal code. 2020-03-24 21:48:00 +00:00
libusbhost Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libutils Set apex_available property 2020-04-20 16:06:02 +09:00
libvndksupport remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
libziparchive Handle the invalid timestamp in zipfile 2020-04-16 04:34:00 +00:00
llkd Merge changes Ibb4b4ca4,I31572afa 2020-01-17 15:39:45 +00:00
logcat logcatd: unset pinning log files 2020-04-23 13:53:37 -07:00
logd liblog: support extended logger_entry headers 2020-04-10 11:48:06 -07:00
logwrapper logwrap: add missing O_CLOEXEC 2020-02-27 09:41:24 -08:00
property_service Rename ro.device_owner system property 2020-02-19 10:34:36 +00:00
qemu_pipe Set apex_available property 2020-04-20 16:07:35 +09:00
reboot adb: replace reboot service with exec of /system/bin/reboot. 2019-10-23 14:33:36 -07:00
rootdir Merge "Make /data/apex/active world readable" into rvc-dev 2020-04-24 21:44:40 +00:00
run-as run-as: improve diagnostics on failure. 2019-03-13 11:16:03 -07:00
sdcard Move layout_version to /data/misc/installd 2019-08-21 10:12:18 -07:00
set-verity-state set-verity-state: Link to libfs_mgr_binder. 2019-12-30 13:42:57 -08:00
shell_and_utilities Update shell_and_utilities docs for R. 2020-01-16 15:54:16 -08:00
storaged storaged: ignore SIGPIPE 2020-03-18 13:53:15 -07:00
toolbox Control audio HAL services in start/stop 2020-04-23 10:42:55 -07:00
trusty Merge "First working version of the confirmationui HAL service" 2020-01-21 16:40:03 +00:00
usbd Remove libhwbinder/libhidltransport deps 2019-09-05 14:17:42 -07:00
watchdogd Move watchdogd out of init 2018-08-02 12:25:58 -07:00
.clang-format Add a 2 width option of clang format. 2017-03-10 13:01:39 -08:00
.clang-format-2 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.clang-format-4 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.gitignore Ignore adb/*.pyc files 2015-08-11 12:59:58 -07:00
Android.bp remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
CleanSpec.mk snapshotctl don't auto-merge. 2020-03-05 08:41:42 -08:00
MODULE_LICENSE_APACHE2 auto import from //depot/cupcake/@135843 2013-07-30 13:56:49 -07:00
NOTICE Fix omission in NOTICE file. 2013-07-30 13:56:55 -07:00
OWNERS Move per-file OWNERS directives to their directories. 2018-06-06 11:49:40 +09:00
PREUPLOAD.cfg Add a PREUPLOAD.cfg file to run git-clang-format on every commit 2017-03-08 16:51:26 +08:00
TEST_MAPPING Move adb RSA utilities into its own library. 2020-02-11 20:49:20 -08:00