am 511cfd9d: Allow NULL in pthread_mutex_lock/unlock.
* commit '511cfd9dc8cb41bca4920687c7d816ee916ee8e5': Allow NULL in pthread_mutex_lock/unlock.
This commit is contained in:
commit
3c716b1b80
@ -501,6 +501,12 @@ static int __pthread_mutex_lock_with_timeout(pthread_mutex_internal_t* mutex,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int pthread_mutex_lock(pthread_mutex_t* mutex_interface) {
|
int pthread_mutex_lock(pthread_mutex_t* mutex_interface) {
|
||||||
|
#if !defined(__LP64__)
|
||||||
|
if (mutex_interface == NULL) {
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
pthread_mutex_internal_t* mutex = __get_internal_mutex(mutex_interface);
|
pthread_mutex_internal_t* mutex = __get_internal_mutex(mutex_interface);
|
||||||
|
|
||||||
uint16_t old_state = atomic_load_explicit(&mutex->state, memory_order_relaxed);
|
uint16_t old_state = atomic_load_explicit(&mutex->state, memory_order_relaxed);
|
||||||
@ -516,6 +522,12 @@ int pthread_mutex_lock(pthread_mutex_t* mutex_interface) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int pthread_mutex_unlock(pthread_mutex_t* mutex_interface) {
|
int pthread_mutex_unlock(pthread_mutex_t* mutex_interface) {
|
||||||
|
#if !defined(__LP64__)
|
||||||
|
if (mutex_interface == NULL) {
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
pthread_mutex_internal_t* mutex = __get_internal_mutex(mutex_interface);
|
pthread_mutex_internal_t* mutex = __get_internal_mutex(mutex_interface);
|
||||||
|
|
||||||
uint16_t old_state = atomic_load_explicit(&mutex->state, memory_order_relaxed);
|
uint16_t old_state = atomic_load_explicit(&mutex->state, memory_order_relaxed);
|
||||||
|
@ -176,10 +176,18 @@ 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));
|
||||||
|
#if !defined(__LP64__)
|
||||||
|
int pthread_mutex_lock(pthread_mutex_t*) /* __nonnull((1)) */;
|
||||||
|
#else
|
||||||
int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1));
|
int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1));
|
||||||
|
#endif
|
||||||
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));
|
||||||
|
#if !defined(__LP4__)
|
||||||
|
int pthread_mutex_unlock(pthread_mutex_t*) /* __nonnull((1)) */;
|
||||||
|
#else
|
||||||
int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1));
|
int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1));
|
||||||
|
#endif
|
||||||
|
|
||||||
int pthread_once(pthread_once_t*, void (*)(void)) __nonnull((1, 2));
|
int pthread_once(pthread_once_t*, void (*)(void)) __nonnull((1, 2));
|
||||||
|
|
||||||
|
@ -1537,3 +1537,37 @@ TEST(pthread, pthread_types_allow_four_bytes_alignment) {
|
|||||||
GTEST_LOG_(INFO) << "This test tests bionic implementation details.";
|
GTEST_LOG_(INFO) << "This test tests bionic implementation details.";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(pthread, pthread_mutex_lock_null_32) {
|
||||||
|
#if defined(__BIONIC__) && !defined(__LP64__)
|
||||||
|
ASSERT_EQ(EINVAL, pthread_mutex_lock(NULL));
|
||||||
|
#else
|
||||||
|
GTEST_LOG_(INFO) << "This test tests bionic implementation details on 32 bit devices.";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(pthread, pthread_mutex_unlock_null_32) {
|
||||||
|
#if defined(__BIONIC__) && !defined(__LP64__)
|
||||||
|
ASSERT_EQ(EINVAL, pthread_mutex_unlock(NULL));
|
||||||
|
#else
|
||||||
|
GTEST_LOG_(INFO) << "This test tests bionic implementation details on 32 bit devices.";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(pthread_DeathTest, pthread_mutex_lock_null_64) {
|
||||||
|
#if defined(__BIONIC__) && defined(__LP64__)
|
||||||
|
pthread_mutex_t* null_value = nullptr;
|
||||||
|
ASSERT_EXIT(pthread_mutex_lock(null_value), testing::KilledBySignal(SIGSEGV), "");
|
||||||
|
#else
|
||||||
|
GTEST_LOG_(INFO) << "This test tests bionic implementation details on 64 bit devices.";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(pthread_DeathTest, pthread_mutex_unlock_null_64) {
|
||||||
|
#if defined(__BIONIC__) && defined(__LP64__)
|
||||||
|
pthread_mutex_t* null_value = nullptr;
|
||||||
|
ASSERT_EXIT(pthread_mutex_unlock(null_value), testing::KilledBySignal(SIGSEGV), "");
|
||||||
|
#else
|
||||||
|
GTEST_LOG_(INFO) << "This test tests bionic implementation details on 64 bit devices.";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user