From 6c8ad975c7b6e82aa8fc3e6be9fce81811eb2ba8 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 11 Oct 2023 09:49:44 -0700 Subject: [PATCH] Like mutexes, operations on NULL rwlocks are no-ops Fixes a crash when performing operations on a NULL rwlock before rwlock implementation is chosen --- src/thread/windows/SDL_sysrwlock_srw.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/thread/windows/SDL_sysrwlock_srw.c b/src/thread/windows/SDL_sysrwlock_srw.c index 489ea5cfb9..bec3cb07df 100644 --- a/src/thread/windows/SDL_sysrwlock_srw.c +++ b/src/thread/windows/SDL_sysrwlock_srw.c @@ -229,30 +229,52 @@ SDL_RWLock *SDL_CreateRWLock(void) 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 */ { + if (rwlock == NULL) { + return 0; + } + 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 */ { + if (rwlock == NULL) { + return 0; + } + return SDL_rwlock_impl_active.LockForWriting(rwlock); } int SDL_TryLockRWLockForReading(SDL_RWLock *rwlock) { + if (rwlock == NULL) { + return 0; + } + return SDL_rwlock_impl_active.TryLockForReading(rwlock); } int SDL_TryLockRWLockForWriting(SDL_RWLock *rwlock) { + if (rwlock == NULL) { + return 0; + } + 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 */ { + if (rwlock == NULL) { + return 0; + } + return SDL_rwlock_impl_active.Unlock(rwlock); }