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
This commit is contained in:
Elliott Hughes 2014-10-07 16:02:11 -07:00
parent eeb9aa02b7
commit 7d3f553f98
2 changed files with 14 additions and 2 deletions

View file

@ -448,6 +448,12 @@ static inline __always_inline int _recursive_increment(pthread_mutex_t* mutex, i
} }
int pthread_mutex_lock(pthread_mutex_t* mutex) { int pthread_mutex_lock(pthread_mutex_t* mutex) {
#if !defined(__LP64__)
if (mutex == NULL) {
return EINVAL;
}
#endif
int mvalue, mtype, tid, shared; int mvalue, mtype, tid, shared;
mvalue = mutex->value; mvalue = mutex->value;
@ -526,6 +532,12 @@ int pthread_mutex_lock(pthread_mutex_t* mutex) {
} }
int pthread_mutex_unlock(pthread_mutex_t* mutex) { int pthread_mutex_unlock(pthread_mutex_t* mutex) {
#if !defined(__LP64__)
if (mutex == NULL) {
return EINVAL;
}
#endif
int mvalue, mtype, tid, shared; int mvalue, mtype, tid, shared;
mvalue = mutex->value; mvalue = mutex->value;

View file

@ -206,10 +206,10 @@ int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __nonnull((1));
int pthread_mutex_destroy(pthread_mutex_t*) __nonnull((1)); 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_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_timedlock(pthread_mutex_t*, const struct timespec*) __nonnull((1, 2));
int pthread_mutex_trylock(pthread_mutex_t*) __nonnull((1)); 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)); int pthread_once(pthread_once_t*, void (*)(void)) __nonnull((1, 2));