diff options
author | Mark Salyzyn <salyzyn@google.com> | 2016-03-01 13:45:42 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@google.com> | 2016-03-22 13:01:15 -0700 |
commit | 018a96d03f0d452bf078084eedcd5693da42308d (patch) | |
tree | 28a998736c3637944985ccacb20539527e19d3e5 /liblog/logger_lock.c | |
parent | 80b1b188281b0c89e94cd9c3c3f2b04f007d6b28 (diff) | |
download | core-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.c | 82 |
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 +} |