Linux: Fix memory leak when inotify init failed

This introduces regex_compiled boolean to track whether the regex is
compiled successfully.

Closes #2229

(cherry picked from commit c992226a9c)
This commit is contained in:
Michael Skec 2023-11-09 15:04:19 +11:00 committed by Camilla Löwy
parent 6f9686f1f4
commit 7c7cc59889
2 changed files with 7 additions and 1 deletions

View File

@ -283,7 +283,9 @@ GLFWbool _glfwInitJoysticksLinux(void)
// Continue without device connection notifications if inotify fails // Continue without device connection notifications if inotify fails
if (regcomp(&_glfw.linjs.regex, "^event[0-9]\\+$", 0) != 0) _glfw.linjs.regex_compiled = regcomp(&_glfw.linjs.regex,
"^event[0-9]\\+$", 0) == 0;
if (!_glfw.linjs.regex_compiled)
{ {
_glfwInputError(GLFW_PLATFORM_ERROR, "Linux: Failed to compile regex"); _glfwInputError(GLFW_PLATFORM_ERROR, "Linux: Failed to compile regex");
return GLFW_FALSE; return GLFW_FALSE;
@ -342,6 +344,9 @@ void _glfwTerminateJoysticksLinux(void)
close(_glfw.linjs.inotify); close(_glfw.linjs.inotify);
} }
if (_glfw.linjs.regex_compiled)
regfree(&_glfw.linjs.regex);
} }
void _glfwDetectJoystickConnectionLinux(void) void _glfwDetectJoystickConnectionLinux(void)

View File

@ -53,6 +53,7 @@ typedef struct _GLFWlibraryLinux
int inotify; int inotify;
int watch; int watch;
regex_t regex; regex_t regex;
GLFWbool regex_compiled;
GLFWbool dropped; GLFWbool dropped;
} _GLFWlibraryLinux; } _GLFWlibraryLinux;