OSDN Git Service

libc: add sanity checks to pthread_mutex_destroy()
authorDavid 'Digit' Turner <digit@google.com>
Mon, 28 Jun 2010 21:20:22 +0000 (14:20 -0700)
committerDavid 'Digit' Turner <digit@google.com>
Mon, 28 Jun 2010 21:20:22 +0000 (14:20 -0700)
Change-Id: Iddb2204fa792fa9aca5f19838926dddbb09b74a2

libc/bionic/pthread.c
libc/docs/CHANGES.TXT

index 061cce1..e21a1f9 100644 (file)
@@ -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;
index 83703d8..5a7a1ac 100644 (file)
@@ -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().