mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-21 01:12:32 +08:00
gprofng: fix a memory leak in the mxv-pthreads example
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.
This commit is contained in:
parent
0e15fd3d54
commit
d6a07eeabb
@ -28,9 +28,10 @@
|
||||
|
||||
#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);
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user