diff options
author | Elliott Hughes <enh@google.com> | 2012-10-11 16:08:51 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2012-10-11 16:08:51 -0700 |
commit | 3b297c40794b23d50cb5240f9b03f6ef25fd98db (patch) | |
tree | ebcb95b3cd9f249f08257e8654307f88c98e6dbb /libc | |
parent | 417fd2334a694cf6a831b81cd672b4ca31ff2f54 (diff) | |
download | android_bionic-3b297c40794b23d50cb5240f9b03f6ef25fd98db.tar.gz android_bionic-3b297c40794b23d50cb5240f9b03f6ef25fd98db.tar.bz2 android_bionic-3b297c40794b23d50cb5240f9b03f6ef25fd98db.zip |
Fix dlerror(3).
Add unit tests for dlerror(3) in various situations. I think We're at least
as good as glibc now.
Also factor out the ScopedPthreadMutexLock and use it here too.
Bug: http://code.google.com/p/android/issues/detail?id=38398
Change-Id: I040938b4366ab836e3df46d1d8055b92f4ea6ed8
Diffstat (limited to 'libc')
-rw-r--r-- | libc/bionic/malloc_debug_check.cpp | 27 | ||||
-rw-r--r-- | libc/bionic/malloc_debug_common.cpp | 7 | ||||
-rw-r--r-- | libc/bionic/malloc_debug_common.h | 16 | ||||
-rw-r--r-- | libc/bionic/malloc_debug_leak.cpp | 8 | ||||
-rw-r--r-- | libc/private/ScopedPthreadMutexLocker.h | 40 |
5 files changed, 64 insertions, 34 deletions
diff --git a/libc/bionic/malloc_debug_check.cpp b/libc/bionic/malloc_debug_check.cpp index 9e6d92e5d..4190a1df6 100644 --- a/libc/bionic/malloc_debug_check.cpp +++ b/libc/bionic/malloc_debug_check.cpp @@ -26,31 +26,30 @@ * SUCH DAMAGE. */ +#include <arpa/inet.h> +#include <dlfcn.h> #include <errno.h> +#include <errno.h> +#include <fcntl.h> #include <pthread.h> -#include <time.h> +#include <stdarg.h> +#include <stdbool.h> +#include <stddef.h> #include <stdio.h> -#include <arpa/inet.h> -#include <sys/socket.h> #include <stdlib.h> #include <string.h> +#include <sys/socket.h> +#include <sys/system_properties.h> +#include <sys/types.h> +#include <time.h> #include <unistd.h> -#include <errno.h> -#include <stddef.h> -#include <stdarg.h> -#include <fcntl.h> #include <unwind.h> -#include <dlfcn.h> -#include <stdbool.h> - -#include <sys/types.h> -#include <sys/system_properties.h> #include "dlmalloc.h" #include "logd.h" - -#include "malloc_debug_common.h" #include "malloc_debug_check_mapinfo.h" +#include "malloc_debug_common.h" +#include "ScopedPthreadMutexLocker.h" static mapinfo *milist; diff --git a/libc/bionic/malloc_debug_common.cpp b/libc/bionic/malloc_debug_common.cpp index adcc238c8..0594c0aa8 100644 --- a/libc/bionic/malloc_debug_common.cpp +++ b/libc/bionic/malloc_debug_common.cpp @@ -40,11 +40,14 @@ * or static (libc.a) linking. */ -#include <stdlib.h> +#include "malloc_debug_common.h" + #include <pthread.h> +#include <stdlib.h> #include <unistd.h> + #include "dlmalloc.h" -#include "malloc_debug_common.h" +#include "ScopedPthreadMutexLocker.h" /* * In a VM process, this is set to 1 after fork()ing out of zygote. diff --git a/libc/bionic/malloc_debug_common.h b/libc/bionic/malloc_debug_common.h index 45b4e3645..78ad5e595 100644 --- a/libc/bionic/malloc_debug_common.h +++ b/libc/bionic/malloc_debug_common.h @@ -33,6 +33,8 @@ #ifndef MALLOC_DEBUG_COMMON_H #define MALLOC_DEBUG_COMMON_H +#include <stdlib.h> + #define HASHTABLE_SIZE 1543 #define BACKTRACE_SIZE 32 /* flag definitions, currently sharing storage with "size" */ @@ -101,18 +103,4 @@ typedef void (*MallocDebugFini)(); #define info_log(format, ...) \ __libc_android_log_print(ANDROID_LOG_INFO, "malloc_leak_check", (format), ##__VA_ARGS__ ) -class ScopedPthreadMutexLocker { - public: - explicit ScopedPthreadMutexLocker(pthread_mutex_t* mu) : mu_(mu) { - pthread_mutex_lock(mu_); - } - - ~ScopedPthreadMutexLocker() { - pthread_mutex_unlock(mu_); - } - - private: - pthread_mutex_t* mu_; -}; - #endif // MALLOC_DEBUG_COMMON_H diff --git a/libc/bionic/malloc_debug_leak.cpp b/libc/bionic/malloc_debug_leak.cpp index ca00d4d9b..090a98185 100644 --- a/libc/bionic/malloc_debug_leak.cpp +++ b/libc/bionic/malloc_debug_leak.cpp @@ -26,6 +26,7 @@ * SUCH DAMAGE. */ +#include <arpa/inet.h> #include <dlfcn.h> #include <errno.h> #include <fcntl.h> @@ -36,19 +37,18 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <unistd.h> -#include <unwind.h> - -#include <arpa/inet.h> #include <sys/select.h> #include <sys/socket.h> #include <sys/system_properties.h> #include <sys/types.h> #include <sys/un.h> +#include <unistd.h> +#include <unwind.h> #include "dlmalloc.h" #include "logd.h" #include "malloc_debug_common.h" +#include "ScopedPthreadMutexLocker.h" // This file should be included into the build only when // MALLOC_LEAK_CHECK, or MALLOC_QEMU_INSTRUMENT, or both diff --git a/libc/private/ScopedPthreadMutexLocker.h b/libc/private/ScopedPthreadMutexLocker.h new file mode 100644 index 000000000..06b8e37b2 --- /dev/null +++ b/libc/private/ScopedPthreadMutexLocker.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2012 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. + */ + +#ifndef SCOPED_PTHREAD_MUTEX_LOCKER_H +#define SCOPED_PTHREAD_MUTEX_LOCKER_H + +#include <pthread.h> + +class ScopedPthreadMutexLocker { + public: + explicit ScopedPthreadMutexLocker(pthread_mutex_t* mu) : mu_(mu) { + pthread_mutex_lock(mu_); + } + + ~ScopedPthreadMutexLocker() { + pthread_mutex_unlock(mu_); + } + + private: + pthread_mutex_t* mu_; + + // Disallow copy and assignment. + ScopedPthreadMutexLocker(const ScopedPthreadMutexLocker&); + void operator=(const ScopedPthreadMutexLocker&); +}; + +#endif // SCOPED_PTHREAD_MUTEX_LOCKER_H |