فهرست منبع

Reduce the possibility of SDL_LockMutex getting called on a destroyed mutex after SDL_StopEventLoop

Sam Lantinga 4 ماه پیش
والد
کامیت
6e0df0af24
1فایلهای تغییر یافته به همراه8 افزوده شده و 3 حذف شده
  1. 8 3
      src/events/SDL_events.c

+ 8 - 3
src/events/SDL_events.c

@@ -886,12 +886,17 @@ void SDL_StopEventLoop(void)
     }
     SDL_zero(SDL_EventOK);
 
-    SDL_UnlockMutex(SDL_EventQ.lock);
-
+    SDL_Mutex *lock = NULL;
     if (SDL_EventQ.lock) {
-        SDL_DestroyMutex(SDL_EventQ.lock);
+        lock = SDL_EventQ.lock;
         SDL_EventQ.lock = NULL;
     }
+
+    SDL_UnlockMutex(lock);
+
+    if (lock) {
+        SDL_DestroyMutex(lock);
+    }
 }
 
 // This function (and associated calls) may be called more than once