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:
Ruud van der Pas
2024-10-16 16:12:06 +00:00
committed by Vladimir Mezentsev
parent 0e15fd3d54
commit d6a07eeabb
3 changed files with 18 additions and 11 deletions

View File

@@ -28,9 +28,10 @@
#include "mydefs.h" #include "mydefs.h"
bool verbose;
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
bool verbose = false;
thread_data *thread_data_arguments; thread_data *thread_data_arguments;
pthread_t *pthread_ids; pthread_t *pthread_ids;
@@ -62,8 +63,7 @@ int main (int argc, char **argv)
&number_of_rows, &number_of_rows,
&number_of_columns, &number_of_columns,
&repeat_count, &repeat_count,
&number_of_threads, &number_of_threads);
&verbose);
if (verbose) printf ("Verbose mode enabled\n"); if (verbose) printf ("Verbose mode enabled\n");
@@ -191,11 +191,16 @@ int main (int argc, char **argv)
* Release the allocated memory and end execution. * Release the allocated memory and end execution.
* ----------------------------------------------------------------------------- * -----------------------------------------------------------------------------
*/ */
for (int64_t i=0; i<number_of_rows; i++)
{
free (A[i]);
}
free (A); free (A);
free (b); free (b);
free (c); free (c);
free (ref); free (ref);
free (pthread_ids); free (pthread_ids);
free (thread_data_arguments);
return (0); return (0);
} }
@@ -211,8 +216,7 @@ int get_user_options (int argc, char *argv[],
int64_t *number_of_rows, int64_t *number_of_rows,
int64_t *number_of_columns, int64_t *number_of_columns,
int64_t *repeat_count, int64_t *repeat_count,
int64_t *number_of_threads, int64_t *number_of_threads)
bool *verbose)
{ {
int opt; int opt;
int errors = 0; int errors = 0;
@@ -226,7 +230,7 @@ int get_user_options (int argc, char *argv[],
*number_of_columns = default_columns; *number_of_columns = default_columns;
*number_of_threads = default_number_of_threads; *number_of_threads = default_number_of_threads;
*repeat_count = default_repeat_count; *repeat_count = default_repeat_count;
*verbose = default_verbose; verbose = default_verbose;
while ((opt = getopt (argc, argv, "m:n:r:t:vh")) != -1) 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); *number_of_threads = atol (optarg);
break; break;
case 'v': case 'v':
*verbose = true; verbose = true;
break; break;
case 'h': case 'h':
default: 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]); printf (" %c c[%ld] = %f ref[%ld] = %f\n",marker[i],i,c[i],i,ref[i]);
} }
free (marker);
return (errors); return (errors);
} }

View File

@@ -20,8 +20,6 @@
#include "mydefs.h" #include "mydefs.h"
bool verbose;
/* /*
* ----------------------------------------------------------------------------- * -----------------------------------------------------------------------------
* This function allocates the data and sets up the data structures to be used * 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"); perror ("vector ref");
exit (-1); exit (-1);
} }
else
{
if (verbose) printf ("Vector ref allocated\n");
}
if ((*A = (double **) malloc (number_of_rows * sizeof (double))) == NULL) if ((*A = (double **) malloc (number_of_rows * sizeof (double))) == NULL)
{ {

View File

@@ -63,8 +63,7 @@ int get_user_options (int argc,
int64_t *number_of_rows, int64_t *number_of_rows,
int64_t *number_of_columns, int64_t *number_of_columns,
int64_t *repeat_count, int64_t *repeat_count,
int64_t *number_of_threads, int64_t *number_of_threads);
bool *verbose);
void init_data (int64_t m, void init_data (int64_t m,
int64_t n, int64_t n,