summaryrefslogtreecommitdiffstats
path: root/liblog/logger_lock.c
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2016-03-01 13:45:42 -0800
committerDan Willemsen <dwillemsen@google.com>2016-03-22 13:01:15 -0700
commit018a96d03f0d452bf078084eedcd5693da42308d (patch)
tree28a998736c3637944985ccacb20539527e19d3e5 /liblog/logger_lock.c
parent80b1b188281b0c89e94cd9c3c3f2b04f007d6b28 (diff)
downloadcore-018a96d03f0d452bf078084eedcd5693da42308d.tar.gz
core-018a96d03f0d452bf078084eedcd5693da42308d.tar.bz2
core-018a96d03f0d452bf078084eedcd5693da42308d.zip
liblog: split out transports into separate files
Create config_logger, logger and logger_read to house the log interfaces. Add fake_logger, logd_logger and pmsg_logger to house the write and read transports. Allows for an easier and direct path to add new transports to the library. SideEffects: None, logger benchmark performance unaffected Bug: 27176738 Bug: 27405083 Change-Id: I01b38637334a5242905c8c89f6ab0a92e2540008
Diffstat (limited to 'liblog/logger_lock.c')
-rw-r--r--liblog/logger_lock.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/liblog/logger_lock.c b/liblog/logger_lock.c
new file mode 100644
index 000000000..ee979bd5e
--- /dev/null
+++ b/liblog/logger_lock.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007-2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Some OS specific dribs and drabs (locking etc).
+ */
+
+#if !defined(_WIN32)
+#include <pthread.h>
+#endif
+
+#include <private/android_filesystem_config.h>
+
+#include "logger.h"
+
+LIBLOG_HIDDEN uid_t __android_log_uid()
+{
+#if defined(_WIN32)
+ return AID_SYSTEM;
+#else
+ static uid_t last_uid = AID_ROOT; /* logd *always* starts up as AID_ROOT */
+
+ if (last_uid == AID_ROOT) { /* have we called to get the UID yet? */
+ last_uid = getuid();
+ }
+ return last_uid;
+#endif
+}
+
+LIBLOG_HIDDEN pid_t __android_log_pid()
+{
+ static pid_t last_pid = (pid_t) -1;
+
+ if (last_pid == (pid_t) -1) {
+ last_pid = getpid();
+ }
+ return last_pid;
+}
+
+#if !defined(_WIN32)
+static pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER;
+#endif
+
+LIBLOG_HIDDEN void __android_log_lock()
+{
+#if !defined(_WIN32)
+ /*
+ * If we trigger a signal handler in the middle of locked activity and the
+ * signal handler logs a message, we could get into a deadlock state.
+ */
+ pthread_mutex_lock(&log_init_lock);
+#endif
+}
+
+LIBLOG_HIDDEN int __android_log_trylock()
+{
+#if !defined(_WIN32)
+ return pthread_mutex_trylock(&log_init_lock);
+#else
+ return 0;
+#endif
+}
+
+LIBLOG_HIDDEN void __android_log_unlock()
+{
+#if !defined(_WIN32)
+ pthread_mutex_unlock(&log_init_lock);
+#endif
+}