]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gprofng: fix a memory leak in the mxv-pthreads example
authorRuud van der Pas <ruud.vanderpas@oracle.com>
Wed, 16 Oct 2024 16:12:06 +0000 (16:12 +0000)
committerVladimir Mezentsev <vladimir.mezentsev@oracle.com>
Fri, 18 Oct 2024 03:20:23 +0000 (20:20 -0700)
Fix a bug where the main program does not free the rows of
the matrix. The memory for thread_data_arguments is also
not released. In function check_results, the memory for the
marker vector is not released.
The usage of the verbose veriable has been extended to
print more messages.

gprofng/ChangeLog
2024-10-16  Ruud van der Pas  <ruud.vanderpas@oracle.com>

PR 32273
PR 32274
* mxv-pthreads/src/main.c: add calls to free() to
release the memory allocated for array A and vector
marker. Improve the usage of the verbose variable.
* mxv-pthreads/src/manage_data.c: add a diagnostic
printf statement.
* mxv-pthreads/src/mydefs.h: adapt prototype to
match the changes in main.c.

gprofng/examples/mxv-pthreads/src/main.c
gprofng/examples/mxv-pthreads/src/manage_data.c
gprofng/examples/mxv-pthreads/src/mydefs.h

index 625c60484d12e1c75169edd5bdb245b19b8998c8..8596763b918cee09d9c1d08328c64f8223397d31 100644 (file)
 
 #include "mydefs.h"
 
+bool verbose;
+
 int main (int argc, char **argv)
 {
-  bool verbose = false;
 
   thread_data *thread_data_arguments;
   pthread_t   *pthread_ids;
@@ -62,8 +63,7 @@ int main (int argc, char **argv)
                        &number_of_rows,
                        &number_of_columns,
                        &repeat_count,
-                       &number_of_threads,
-                       &verbose);
+                       &number_of_threads);
 
   if (verbose) printf ("Verbose mode enabled\n");
 
@@ -191,11 +191,16 @@ int main (int argc, char **argv)
 * Release the allocated memory and end execution.
 * -----------------------------------------------------------------------------
 */
+  for (int64_t i=0; i<number_of_rows; i++)
+    {
+      free (A[i]);
+    }
   free (A);
   free (b);
   free (c);
   free (ref);
   free (pthread_ids);
+  free (thread_data_arguments);
 
   return (0);
 }
@@ -211,8 +216,7 @@ int get_user_options (int argc, char *argv[],
                      int64_t *number_of_rows,
                      int64_t *number_of_columns,
                      int64_t *repeat_count,
-                     int64_t *number_of_threads,
-                     bool    *verbose)
+                     int64_t *number_of_threads)
 {
   int      opt;
   int      errors                   = 0;
@@ -226,7 +230,7 @@ int get_user_options (int argc, char *argv[],
   *number_of_columns = default_columns;
   *number_of_threads = default_number_of_threads;
   *repeat_count      = default_repeat_count;
-  *verbose          = default_verbose;
+  verbose           = default_verbose;
 
   while ((opt = getopt (argc, argv, "m:n:r:t:vh")) != -1)
     {
@@ -245,7 +249,7 @@ int get_user_options (int argc, char *argv[],
            *number_of_threads = atol (optarg);
            break;
          case 'v':
-           *verbose = true;
+           verbose = true;
            break;
          case 'h':
          default:
@@ -370,5 +374,7 @@ int64_t check_results (int64_t m, int64_t n, double *c, double *ref)
       printf ("  %c c[%ld] = %f ref[%ld] = %f\n",marker[i],i,c[i],i,ref[i]);
   }
 
+  free (marker);
+
   return (errors);
 }
index 3f2891cda5d1be1100d5bb0c7d432b28f340e972..9db4496b802634f630d9c897362eed8d69fdf0e8 100644 (file)
@@ -20,8 +20,6 @@
 
 #include "mydefs.h"
 
-bool verbose;
-
 /*
 * -----------------------------------------------------------------------------
 * This function allocates the data and sets up the data structures to be used
@@ -66,6 +64,10 @@ void allocate_data (int active_threads,
       perror ("vector ref");
       exit (-1);
     }
+  else
+    {
+      if (verbose) printf ("Vector ref allocated\n");
+    }
 
   if ((*A = (double **) malloc (number_of_rows * sizeof (double))) == NULL)
     {
index eae0834cafc8ac919bd83cb55dfd404c2414bf59..1f7e00a00a57df11ccc8ee41cd781ee600c588cc 100644 (file)
@@ -63,8 +63,7 @@ int get_user_options (int     argc,
                      int64_t *number_of_rows,
                      int64_t *number_of_columns,
                      int64_t *repeat_count,
-                     int64_t *number_of_threads,
-                     bool    *verbose);
+                     int64_t *number_of_threads);
 
 void init_data (int64_t m,
                int64_t n,