summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@google.com>2010-06-28 14:20:22 -0700
committerDavid 'Digit' Turner <digit@google.com>2010-06-28 14:20:22 -0700
commita02b93bd75a9d156117264d88069566e447397e2 (patch)
tree82f11630b57fc7a9defa24b8e2955a5614275d1c /libc
parent0621a279adfb981ea1f0564e7fc8280cda78e043 (diff)
downloadbionic-a02b93bd75a9d156117264d88069566e447397e2.zip
bionic-a02b93bd75a9d156117264d88069566e447397e2.tar.gz
bionic-a02b93bd75a9d156117264d88069566e447397e2.tar.bz2
libc: add sanity checks to pthread_mutex_destroy()
Change-Id: Iddb2204fa792fa9aca5f19838926dddbb09b74a2
Diffstat (limited to 'libc')
-rw-r--r--libc/bionic/pthread.c9
-rw-r--r--libc/docs/CHANGES.TXT4
2 files changed, 10 insertions, 3 deletions
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index 061cce1..e21a1f9 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -880,8 +880,13 @@ int pthread_mutex_init(pthread_mutex_t *mutex,
int pthread_mutex_destroy(pthread_mutex_t *mutex)
{
- if (__unlikely(mutex == NULL))
- return EINVAL;
+ int ret;
+
+ /* use trylock to ensure that the mutex value is
+ * valid and is not already locked. */
+ ret = pthread_mutex_trylock(mutex);
+ if (ret != 0)
+ return ret;
mutex->value = 0xdead10cc;
return 0;
diff --git a/libc/docs/CHANGES.TXT b/libc/docs/CHANGES.TXT
index 83703d8..5a7a1ac 100644
--- a/libc/docs/CHANGES.TXT
+++ b/libc/docs/CHANGES.TXT
@@ -3,7 +3,9 @@ Bionic ChangeLog:
Differences between current and Android 2.2:
-- <pthread.h>: Add reader/writer locks implementation.
+- <pthread.h>: Add reader/writer locks implementation. Add sanity
+ checking to pthread_mutex_destroy() (e.g. a locked mutex will return
+ EBUSY).
- <semaphore.h>: Use private futexes for semaphore implementation,
unless your set 'pshared' to non-0 when calling sem_init().