SDL: Like mutexes, operations on NULL rwlocks are no-ops

From 6c8ad975c7b6e82aa8fc3e6be9fce81811eb2ba8 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
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 489ea5cfb959..bec3cb07df9a 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);
 }