Procházet zdrojové kódy

Fixed crash when setting the default cursor twice

This happens in the KMSDRM driver, once after video init, setting a blank default cursor, and once when creating a window when the KMSDRM mouse is initialized.

Also fixed a memory leak freeing the default cursor at shutdown
Sam Lantinga před 1 rokem
rodič
revize
9129e1d557
1 změnil soubory, kde provedl 8 přidání a 4 odebrání
  1. 8 4
      src/events/SDL_mouse.c

+ 8 - 4
src/events/SDL_mouse.c

@@ -234,7 +234,11 @@ void SDL_SetDefaultCursor(SDL_Cursor *cursor)
     if (mouse->def_cursor) {
         SDL_Cursor *default_cursor = mouse->def_cursor;
 
+        if (mouse->cur_cursor == mouse->def_cursor) {
+            mouse->cur_cursor = NULL;
+        }
         mouse->def_cursor = NULL;
+
         SDL_DestroyCursor(default_cursor);
     }
 
@@ -865,6 +869,10 @@ void SDL_QuitMouse(void)
     SDL_SetRelativeMouseMode(SDL_FALSE);
     SDL_ShowCursor();
 
+    if (mouse->def_cursor) {
+        SDL_SetDefaultCursor(NULL);
+    }
+
     cursor = mouse->cursors;
     while (cursor) {
         next = cursor->next;
@@ -874,10 +882,6 @@ void SDL_QuitMouse(void)
     mouse->cursors = NULL;
     mouse->cur_cursor = NULL;
 
-    if (mouse->def_cursor) {
-        SDL_SetDefaultCursor(NULL);
-    }
-
     if (mouse->sources) {
         SDL_free(mouse->sources);
         mouse->sources = NULL;