No description
Find a file
Tom Cherry 36d31c530d 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
2020-04-23 16:38:11 -07:00
adb [adb client] Add "mdns services" command. 2020-04-22 08:43:15 -07:00
base base: reimagine line splitting in logger.cpp 2020-04-23 16:38:11 -07:00
bootstat Improve logging in bootstat. 2020-04-02 13:03:21 +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 Remove EXCLUDE_FS_CONFIG_STRUCTURES 2020-03-04 15:34:09 -08:00
debuggerd Don't include log/log_read.h in log/log.h 2020-04-17 15:31:34 -07:00
deprecated-adf remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
diagnose_usb Revert "Revert "Set apex_available property"" 2020-03-26 00:23:56 +00:00
fastboot libsnapshot clients: Add missing dep. 2020-04-16 13:12:41 -07:00
fs_mgr liblp: Fix tests for linear extent overlap. 2020-04-21 15:43:59 -07:00
gatekeeperd Use optional for nullable types 2020-02-24 09:31:47 +09:00
healthd BatteryMonitor: report current_now in uA 2020-04-08 16:24:17 -07:00
include Move android_filesystem_config.h => fs_config.h 2017-08-02 16:31:19 -07:00
init Add /mnt/androidwritable for MOUNT_EXTERNAL_ANDROID_WRITABLE apps 2020-04-21 12:16:43 +01: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 Revert "Revert "Set apex_available property"" 2020-03-26 00:23:56 +00:00
libbacktrace Remove use of static libdexfile to avoid linking in ART internal code. 2020-03-19 22:23:54 +00:00
libbinderwrapper Make libbinderwrapper available in /vendor partition 2018-04-06 08:41:21 +09:00
libcrypto_utils Set apex_available property 2020-03-09 16:38:02 +09:00
libcutils DO NOT MERGE - x86: Switch get_pc_thunk to comdat 2020-04-18 14:07:19 -07: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 Merge "Don't include log/log_read.h in log/log.h" 2020-04-23 14:58:44 +00:00
libmodprobe first_stage_init: load modules in modules.load.recovery in recovery 2020-04-06 12:24:16 -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
libpixelflinger Remove mips pixelflinger. 2020-03-07 05:51:52 +00:00
libprocessgroup Set apex_available property 2020-04-08 22:37:42 +09: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 Set apex_available property 2020-04-08 23:49:40 +09:00
libsuspend Remove libsuspend from VNDK. 2018-08-14 13:39:55 -07:00
libsync libsystem/libsync: Update OWNERS 2020-02-28 10:50:50 -08:00
libsystem Set apex_available property 2020-03-09 16:38:02 +09:00
libsysutils NetlinkEvent - ignore captive portal and pref64 nd user opts 2020-03-31 20:25:33 -07:00
libunwindstack Merge "Create minimal remap table for symbol binary search." 2020-04-20 23:42:22 +00:00
libusbhost Prevent infinite loop on zero length USB descriptors 2020-02-21 11:11:02 -08:00
libutils [cleanup] Fix a clang-tidy warning 2020-04-22 16:20:29 -07:00
libvndksupport remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
libziparchive Fix unzip formatting. 2020-04-17 16:07:01 -07:00
llkd Merge changes Ibb4b4ca4,I31572afa 2020-01-17 15:39:45 +00:00
logcat Don't include log/log_read.h in log/log.h 2020-04-17 15:31:34 -07:00
logd Don't include log/log_read.h in log/log.h 2020-04-17 15:31:34 -07:00
logwrapper logwrap: add missing O_CLOEXEC 2020-02-26 10:29:04 -08:00
property_service Rename ro.device_owner system property 2020-02-19 10:34:36 +00:00
qemu_pipe Revert "Revert "Set apex_available property"" 2020-03-26 00:23:56 +00:00
reboot adb: replace reboot service with exec of /system/bin/reboot. 2019-10-23 14:33:36 -07:00
rootdir Manually unmount /data_mirror mounts in the right order 2020-04-07 15:43:10 +00:00
run-as run-as: improve error messages. 2020-03-04 18:11:18 -08: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-17 09:31:01 -07:00
toolbox toolbox: add modprobe 2019-08-06 13:58:13 -07:00
trusty Use <fqname> to avoid conflicts 2020-04-14 14:37:24 -07: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-03 13:19:49 -08:00
MODULE_LICENSE_APACHE2
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 Implement the functions to parse zip64 structs 2020-03-24 15:06:57 -07:00