Work around a bug in Immersion's libImmEmulatorJ.so.

This library calls pthread_mutex_lock and pthread_mutex_unlock with a NULL
pthread_mutex_t*. This gives them (and their users) one release to fix things.

Bug: 17443936
Change-Id: I3b63c9a3dd63db0833f21073e323b3236a13b47a
diff --git a/libc/bionic/pthread_mutex.cpp b/libc/bionic/pthread_mutex.cpp
index cbb6ef7..b338e51 100644
--- a/libc/bionic/pthread_mutex.cpp
+++ b/libc/bionic/pthread_mutex.cpp
@@ -448,6 +448,12 @@
 }
 
 int pthread_mutex_lock(pthread_mutex_t* mutex) {
+#if !defined(__LP64__)
+    if (mutex == NULL) {
+        return EINVAL;
+    }
+#endif
+
     int mvalue, mtype, tid, shared;
 
     mvalue = mutex->value;
@@ -526,6 +532,12 @@
 }
 
 int pthread_mutex_unlock(pthread_mutex_t* mutex) {
+#if !defined(__LP64__)
+    if (mutex == NULL) {
+        return EINVAL;
+    }
+#endif
+
     int mvalue, mtype, tid, shared;
 
     mvalue = mutex->value;
diff --git a/libc/include/pthread.h b/libc/include/pthread.h
index 86a1005..c32890b 100644
--- a/libc/include/pthread.h
+++ b/libc/include/pthread.h
@@ -206,10 +206,10 @@
 
 int pthread_mutex_destroy(pthread_mutex_t*) __nonnull((1));
 int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __nonnull((1));
-int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1));
+int pthread_mutex_lock(pthread_mutex_t*) /* __nonnull((1)) */;
 int pthread_mutex_timedlock(pthread_mutex_t*, const struct timespec*) __nonnull((1, 2));
 int pthread_mutex_trylock(pthread_mutex_t*) __nonnull((1));
-int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1));
+int pthread_mutex_unlock(pthread_mutex_t*) /* __nonnull((1)) */;
 
 int pthread_once(pthread_once_t*, void (*)(void)) __nonnull((1, 2));