Like mutexes, operations on NULL rwlocks are no-ops

Fixes a crash when performing operations on a NULL rwlock before rwlock implementation is chosen
This commit is contained in:
Sam Lantinga
2023-10-11 09:49:44 -07:00
parent c552cc6847
commit 6c8ad975c7

View File

@@ -229,30 +229,52 @@ SDL_RWLock *SDL_CreateRWLock(void)
void SDL_DestroyRWLock(SDL_RWLock *rwlock) void SDL_DestroyRWLock(SDL_RWLock *rwlock)
{ {
SDL_rwlock_impl_active.Destroy(rwlock); if (rwlock) {
SDL_rwlock_impl_active.Destroy(rwlock);
}
} }
int SDL_LockRWLockForReading(SDL_RWLock *rwlock) SDL_NO_THREAD_SAFETY_ANALYSIS /* clang doesn't know about NULL mutexes */ int SDL_LockRWLockForReading(SDL_RWLock *rwlock) SDL_NO_THREAD_SAFETY_ANALYSIS /* clang doesn't know about NULL mutexes */
{ {
if (rwlock == NULL) {
return 0;
}
return SDL_rwlock_impl_active.LockForReading(rwlock); return SDL_rwlock_impl_active.LockForReading(rwlock);
} }
int SDL_LockRWLockForWriting(SDL_RWLock *rwlock) SDL_NO_THREAD_SAFETY_ANALYSIS /* clang doesn't know about NULL mutexes */ int SDL_LockRWLockForWriting(SDL_RWLock *rwlock) SDL_NO_THREAD_SAFETY_ANALYSIS /* clang doesn't know about NULL mutexes */
{ {
if (rwlock == NULL) {
return 0;
}
return SDL_rwlock_impl_active.LockForWriting(rwlock); return SDL_rwlock_impl_active.LockForWriting(rwlock);
} }
int SDL_TryLockRWLockForReading(SDL_RWLock *rwlock) int SDL_TryLockRWLockForReading(SDL_RWLock *rwlock)
{ {
if (rwlock == NULL) {
return 0;
}
return SDL_rwlock_impl_active.TryLockForReading(rwlock); return SDL_rwlock_impl_active.TryLockForReading(rwlock);
} }
int SDL_TryLockRWLockForWriting(SDL_RWLock *rwlock) int SDL_TryLockRWLockForWriting(SDL_RWLock *rwlock)
{ {
if (rwlock == NULL) {
return 0;
}
return SDL_rwlock_impl_active.TryLockForWriting(rwlock); return SDL_rwlock_impl_active.TryLockForWriting(rwlock);
} }
int SDL_UnlockRWLock(SDL_RWLock *rwlock) SDL_NO_THREAD_SAFETY_ANALYSIS /* clang doesn't know about NULL mutexes */ int SDL_UnlockRWLock(SDL_RWLock *rwlock) SDL_NO_THREAD_SAFETY_ANALYSIS /* clang doesn't know about NULL mutexes */
{ {
if (rwlock == NULL) {
return 0;
}
return SDL_rwlock_impl_active.Unlock(rwlock); return SDL_rwlock_impl_active.Unlock(rwlock);
} }