From 984fcdaa8a7855516a8b84016c0c253680bec3af Mon Sep 17 00:00:00 2001
From: ceski <[EMAIL REDACTED]>
Date: Sun, 17 May 2026 07:21:08 -0700
Subject: [PATCH] testcontroller: free/allocate touchpads only when needed
---
test/gamepadutils.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/test/gamepadutils.c b/test/gamepadutils.c
index 4da9522d16d41..6fff0b419bac8 100644
--- a/test/gamepadutils.c
+++ b/test/gamepadutils.c
@@ -706,6 +706,7 @@ static void FreeTouchpads(GamepadImage *ctx)
void UpdateGamepadImageFromGamepad(GamepadImage *ctx, SDL_Gamepad *gamepad)
{
int i;
+ int num_touchpads;
if (!ctx) {
return;
@@ -763,9 +764,12 @@ void UpdateGamepadImageFromGamepad(GamepadImage *ctx, SDL_Gamepad *gamepad)
ctx->connection_state = SDL_GetGamepadConnectionState(gamepad);
ctx->battery_state = SDL_GetGamepadPowerInfo(gamepad, &ctx->battery_percent);
- FreeTouchpads(ctx);
- ctx->num_touchpads = SDL_GetNumGamepadTouchpads(gamepad);
- ctx->num_touchpads = SDL_min(ctx->num_touchpads, MAX_TOUCHPADS);
+ num_touchpads = SDL_GetNumGamepadTouchpads(gamepad);
+ num_touchpads = SDL_min(num_touchpads, MAX_TOUCHPADS);
+ if (num_touchpads != ctx->num_touchpads) {
+ FreeTouchpads(ctx);
+ ctx->num_touchpads = num_touchpads;
+ }
if (ctx->num_touchpads > 0) {
ctx->touchpads = (GamepadTouchpad *)SDL_malloc(sizeof(*ctx->touchpads) * ctx->num_touchpads);
if (ctx->touchpads) {