From a197efe3a7135fff23ed73f5a1668062e4aa6a19 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 27 Nov 2023 21:37:02 +0100
Subject: [PATCH] pen: fix leak caused by pen subsystem
---
src/events/SDL_mouse.c | 1 +
src/events/SDL_pen.c | 13 +++++++++++++
src/events/SDL_pen_c.h | 5 +++++
test/testautomation_pen.c | 1 +
4 files changed, 20 insertions(+)
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index 44c732e0fb56..97510469794c 100644
--- a/src/events/SDL_mouse.c
+++ b/src/events/SDL_mouse.c
@@ -898,6 +898,7 @@ void SDL_QuitMouse(void)
}
SDL_SetRelativeMouseMode(SDL_FALSE);
SDL_ShowCursor();
+ SDL_PenQuit();
if (mouse->def_cursor) {
SDL_SetDefaultCursor(NULL);
diff --git a/src/events/SDL_pen.c b/src/events/SDL_pen.c
index 655d729d56e5..e3f55482f7af 100644
--- a/src/events/SDL_pen.c
+++ b/src/events/SDL_pen.c
@@ -829,6 +829,19 @@ void SDL_PenInit(void)
#endif
}
+void SDL_PenQuit(void)
+{
+ SDL_DelHintCallback(SDL_HINT_PEN_NOT_MOUSE,
+ SDL_PenUpdateHint, &pen_mouse_emulation_mode);
+
+ SDL_DelHintCallback(SDL_HINT_PEN_DELAY_MOUSE_BUTTON,
+ SDL_PenUpdateHint, &pen_delay_mouse_button_mode);
+#ifndef SDL_THREADS_DISABLED
+ SDL_DestroyMutex(SDL_pen_access_lock);
+ SDL_pen_access_lock = NULL;
+#endif
+}
+
SDL_bool SDL_PenPerformHitTest(void)
{
return pen_mouse_emulation_mode == PEN_MOUSE_EMULATE;
diff --git a/src/events/SDL_pen_c.h b/src/events/SDL_pen_c.h
index 0488d5d92f79..70b1b7fefd1e 100644
--- a/src/events/SDL_pen_c.h
+++ b/src/events/SDL_pen_c.h
@@ -331,6 +331,11 @@ extern int SDL_SendPenWindowEvent(Uint64 timestamp, SDL_PenID instance_id, SDL_W
*/
extern void SDL_PenInit(void);
+/**
+ * De-initialises the pen subsystem.
+ */
+extern void SDL_PenQuit(void);
+
#endif /* SDL_pen_c_h_ */
/* vi: set ts=4 sw=4 expandtab: */
diff --git a/test/testautomation_pen.c b/test/testautomation_pen.c
index d20065660396..d9a6ef2a2889 100644
--- a/test/testautomation_pen.c
+++ b/test/testautomation_pen.c
@@ -54,6 +54,7 @@
#define SDL_SendPenWindowEvent SDL_SUT_SendPenWindowEvent
#define SDL_PenPerformHitTest SDL_SUT_PenPerformHitTest
#define SDL_PenInit SDL_SUT_PenInit
+#define SDL_PenQuit SDL_SUT_PenQuit
/* ================= Mock API ================== */