diff options
author | Ruud van der Pas <ruud.vanderpas@oracle.com> | 2024-10-16 16:12:06 +0000 |
---|---|---|
committer | Vladimir Mezentsev <vladimir.mezentsev@oracle.com> | 2024-10-17 20:20:23 -0700 |
commit | d6a07eeabbadbf846da7d6841340fc589d9a57aa (patch) | |
tree | 4c9a2317b750bfe4324e96c65ce87eb1dcd7a2f0 /gprofng | |
parent | 0e15fd3d54f8e70015f31226eaa87f9eaa536fbd (diff) | |
download | gdb-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.c | 20 | ||||
-rw-r--r-- | gprofng/examples/mxv-pthreads/src/manage_data.c | 6 | ||||
-rw-r--r-- | gprofng/examples/mxv-pthreads/src/mydefs.h | 3 |
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, |