aboutsummaryrefslogtreecommitdiff
path: root/gprofng
diff options
context:
space:
mode:
authorRuud van der Pas <ruud.vanderpas@oracle.com>2024-10-16 16:12:06 +0000
committerVladimir Mezentsev <vladimir.mezentsev@oracle.com>2024-10-17 20:20:23 -0700
commitd6a07eeabbadbf846da7d6841340fc589d9a57aa (patch)
tree4c9a2317b750bfe4324e96c65ce87eb1dcd7a2f0 /gprofng
parent0e15fd3d54f8e70015f31226eaa87f9eaa536fbd (diff)
downloadgdb-d6a07eeabbadbf846da7d6841340fc589d9a57aa.zip
gdb-d6a07eeabbadbf846da7d6841340fc589d9a57aa.tar.gz
gdb-d6a07eeabbadbf846da7d6841340fc589d9a57aa.tar.bz2
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.
Diffstat (limited to 'gprofng')
-rw-r--r--gprofng/examples/mxv-pthreads/src/main.c20
-rw-r--r--gprofng/examples/mxv-pthreads/src/manage_data.c6
-rw-r--r--gprofng/examples/mxv-pthreads/src/mydefs.h3
3 files changed, 18 insertions, 11 deletions
diff --git a/gprofng/examples/mxv-pthreads/src/main.c b/gprofng/examples/mxv-pthreads/src/main.c
index 625c604..8596763 100644
--- a/gprofng/examples/mxv-pthreads/src/main.c
+++ b/gprofng/examples/mxv-pthreads/src/main.c
@@ -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);
}
diff --git a/gprofng/examples/mxv-pthreads/src/manage_data.c b/gprofng/examples/mxv-pthreads/src/manage_data.c
index 3f2891c..9db4496 100644
--- a/gprofng/examples/mxv-pthreads/src/manage_data.c
+++ b/gprofng/examples/mxv-pthreads/src/manage_data.c
@@ -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)
{
diff --git a/gprofng/examples/mxv-pthreads/src/mydefs.h b/gprofng/examples/mxv-pthreads/src/mydefs.h
index eae0834..1f7e00a 100644
--- a/gprofng/examples/mxv-pthreads/src/mydefs.h
+++ b/gprofng/examples/mxv-pthreads/src/mydefs.h
@@ -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,