summaryrefslogtreecommitdiffstats
path: root/libcutils
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2016-07-08 17:05:25 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-07-08 17:05:25 +0000
commit73d363bbc10f5b449d93dda99afdfda24dcfcd2a (patch)
treebf43874434161c7a751003ef9a5869662d912edc /libcutils
parentfcf3ed51dc79935d23c1105c792f77ca40c52137 (diff)
parent588b770063077aa8dcee35fc44b2676702cf3457 (diff)
downloadsystem_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.mk2
-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);