aboutsummaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-10-11 16:08:51 -0700
committerElliott Hughes <enh@google.com>2012-10-11 16:08:51 -0700
commit3b297c40794b23d50cb5240f9b03f6ef25fd98db (patch)
treeebcb95b3cd9f249f08257e8654307f88c98e6dbb /libc
parent417fd2334a694cf6a831b81cd672b4ca31ff2f54 (diff)
downloadandroid_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.cpp27
-rw-r--r--libc/bionic/malloc_debug_common.cpp7
-rw-r--r--libc/bionic/malloc_debug_common.h16
-rw-r--r--libc/bionic/malloc_debug_leak.cpp8
-rw-r--r--libc/private/ScopedPthreadMutexLocker.h40
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