diff options
author | Elliott Hughes <enh@google.com> | 2016-07-08 17:05:25 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-07-08 17:05:25 +0000 |
commit | 73d363bbc10f5b449d93dda99afdfda24dcfcd2a (patch) | |
tree | bf43874434161c7a751003ef9a5869662d912edc /libcutils | |
parent | fcf3ed51dc79935d23c1105c792f77ca40c52137 (diff) | |
parent | 588b770063077aa8dcee35fc44b2676702cf3457 (diff) | |
download | system_core-73d363bbc10f5b449d93dda99afdfda24dcfcd2a.tar.gz system_core-73d363bbc10f5b449d93dda99afdfda24dcfcd2a.tar.bz2 system_core-73d363bbc10f5b449d93dda99afdfda24dcfcd2a.zip |
Merge \"Make klog_fd thread-safe and make klog_init a no-op.\"
am: 588b770063
Change-Id: I884276a8f8b8209f6e956c5fb410e8265184e1b5
Diffstat (limited to 'libcutils')
-rw-r--r-- | libcutils/Android.mk | 2 | ||||
-rw-r--r-- | libcutils/klog.cpp (renamed from libcutils/klog.c) | 27 |
2 files changed, 15 insertions, 14 deletions
diff --git a/libcutils/Android.mk b/libcutils/Android.mk index e29c9ad6e..c830182f9 100644 --- a/libcutils/Android.mk +++ b/libcutils/Android.mk @@ -95,7 +95,7 @@ LOCAL_SRC_FILES := $(libcutils_common_sources) \ android_reboot.c \ ashmem-dev.c \ debugger.c \ - klog.c \ + klog.cpp \ partition_utils.c \ properties.c \ qtaguid.c \ diff --git a/libcutils/klog.c b/libcutils/klog.cpp index 7402903ea..11ebf88fb 100644 --- a/libcutils/klog.c +++ b/libcutils/klog.cpp @@ -26,7 +26,6 @@ #include <cutils/klog.h> -static int klog_fd = -1; static int klog_level = KLOG_DEFAULT_LEVEL; int klog_get_level(void) { @@ -38,31 +37,33 @@ void klog_set_level(int level) { } void klog_init(void) { - if (klog_fd >= 0) return; /* Already initialized */ - - klog_fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC); - if (klog_fd >= 0) { - return; - } +} - static const char* name = "/dev/__kmsg__"; - if (mknod(name, S_IFCHR | 0600, (1 << 8) | 11) == 0) { - klog_fd = open(name, O_WRONLY | O_CLOEXEC); - unlink(name); +static int __open_klog(void) { + int fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC); + if (fd == -1) { + static const char* name = "/dev/__kmsg__"; + if (mknod(name, S_IFCHR | 0600, (1 << 8) | 11) == 0) { + fd = open(name, O_WRONLY | O_CLOEXEC); + unlink(name); + } } + return fd; } #define LOG_BUF_MAX 512 void klog_writev(int level, const struct iovec* iov, int iov_count) { if (level > klog_level) return; - if (klog_fd < 0) klog_init(); - if (klog_fd < 0) return; + + static int klog_fd = __open_klog(); + if (klog_fd == -1) return; TEMP_FAILURE_RETRY(writev(klog_fd, iov, iov_count)); } void klog_write(int level, const char* fmt, ...) { if (level > klog_level) return; + char buf[LOG_BUF_MAX]; va_list ap; va_start(ap, fmt); |