Module: Mesa
Branch: master
Commit: 5b10ddf3589bdd6ef9cfc63a807ae91dc0e4095f
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5b10ddf3589bdd6ef9cfc63a807ae91dc0e4095f

Author: Eric Engestrom <[email protected]>
Date:   Sun Jul  7 11:40:04 2019 +0100

util: fix mem leak of program path

Fixes: 759b94038987bb983398 ("util: Get program name based on path when 
possible")
Signed-off-by: Eric Engestrom <[email protected]>
Reviewed-by: Tapani Pälli <[email protected]>

---

 src/util/u_process.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/util/u_process.c b/src/util/u_process.c
index cbccf48ed01..371335303ec 100644
--- a/src/util/u_process.c
+++ b/src/util/u_process.c
@@ -33,6 +33,15 @@
 #undef GET_PROGRAM_NAME
 
 #if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME)
+
+static char *path = NULL;
+
+static void __freeProgramPath()
+{
+   free(path);
+   path = NULL;
+}
+
 static const char *
 __getProgramName()
 {
@@ -45,14 +54,10 @@ __getProgramName()
        * Strip these arguments out by using the realpath only if it was
        * a prefix of the invocation name.
        */
-      static char *path;
-
-      if (!path)
-         /* Note: realpath() allocates memory that we will keep around for
-          * the lifetime of the app, and then leak as the app closes.
-          * FIXME: we should find a way to clean this properly
-          */
+      if (!path) {
          path = realpath("/proc/self/exe", NULL);
+         atexit(__freeProgramPath);
+      }
 
       if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) {
          /* This shouldn't be null because path is a a prefix,

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to