From 77cb52705a46ada90fd91f4b64a046d39da8d485 Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Thu, 12 Jul 2018 14:32:30 +0200 Subject: [PATCH] Fix memory leak with temporary descriptors --- compute/pzgetrf_incpiv.c | 2 +- compute/pzhetrd_he2hb.c | 7 ++----- compute/zgelqf.c | 1 + compute/zgelqf_param.c | 1 + compute/zgelqs.c | 1 + compute/zgelqs_param.c | 1 + compute/zgels.c | 1 + compute/zgels_param.c | 1 + compute/zgeqrf.c | 1 + compute/zgeqrf_param.c | 1 + compute/zgeqrs.c | 1 + compute/zgeqrs_param.c | 1 + compute/zgesv_incpiv.c | 1 + compute/zgesvd.c | 1 + compute/zgetrf_incpiv.c | 1 + compute/zheevd.c | 1 + compute/zhetrd.c | 1 + compute/ztpgqrt.c | 1 + compute/zunglq.c | 1 + compute/zunglq_param.c | 1 + compute/zungqr.c | 1 + compute/zungqr_param.c | 1 + compute/zunmlq.c | 1 + compute/zunmlq_param.c | 1 + compute/zunmqr.c | 1 + compute/zunmqr_param.c | 1 + 26 files changed, 27 insertions(+), 6 deletions(-) diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c index 4d3bd0958..1053772a1 100644 --- a/compute/pzgetrf_incpiv.c +++ b/compute/pzgetrf_incpiv.c @@ -41,7 +41,7 @@ * Parallel tile LU factorization - dynamic scheduling */ void chameleon_pzgetrf_incpiv( CHAM_desc_t *A, CHAM_desc_t *L, CHAM_desc_t *D, int *IPIV, - RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ) + RUNTIME_sequence_t *sequence, RUNTIME_request_t *request ) { CHAM_context_t *chamctxt; RUNTIME_option_t options; diff --git a/compute/pzhetrd_he2hb.c b/compute/pzhetrd_he2hb.c index 1aedeae69..2ed482692 100644 --- a/compute/pzhetrd_he2hb.c +++ b/compute/pzhetrd_he2hb.c @@ -436,11 +436,8 @@ void chameleon_pzhetrd_he2hb(cham_uplo_t uplo, RUNTIME_options_finalize(&options, chamctxt); CHAMELEON_Sequence_Wait(sequence); - chameleon_desc_mat_free(D); - free(D); - - chameleon_desc_mat_free(AT); - free(AT); + CHAMELEON_Desc_Destroy( &D ); + CHAMELEON_Desc_Destroy( &AT ); (void)E; } diff --git a/compute/zgelqf.c b/compute/zgelqf.c index d6dfbee95..db512fc7e 100644 --- a/compute/zgelqf.c +++ b/compute/zgelqf.c @@ -297,6 +297,7 @@ int CHAMELEON_zgelqf_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c index a86809cf4..b967339ad 100644 --- a/compute/zgelqf_param.c +++ b/compute/zgelqf_param.c @@ -297,6 +297,7 @@ int CHAMELEON_zgelqf_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgelqs.c b/compute/zgelqs.c index 4b74ebf46..4b1483a7c 100644 --- a/compute/zgelqs.c +++ b/compute/zgelqs.c @@ -339,6 +339,7 @@ int CHAMELEON_zgelqs_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *B, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c index 997117abd..758775ab8 100644 --- a/compute/zgelqs_param.c +++ b/compute/zgelqs_param.c @@ -346,6 +346,7 @@ int CHAMELEON_zgelqs_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgels.c b/compute/zgels.c index cd75e4513..4612948cb 100644 --- a/compute/zgels.c +++ b/compute/zgels.c @@ -435,6 +435,7 @@ int CHAMELEON_zgels_Tile_Async( cham_trans_t trans, CHAM_desc_t *A, CHAMELEON_Desc_Flush( B, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgels_param.c b/compute/zgels_param.c index 6547a5371..15233f0a6 100644 --- a/compute/zgels_param.c +++ b/compute/zgels_param.c @@ -427,6 +427,7 @@ int CHAMELEON_zgels_param_Tile_Async( const libhqr_tree_t *qrtree, cham_trans_t CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c index 67679772b..6a16dbd2a 100644 --- a/compute/zgeqrf.c +++ b/compute/zgeqrf.c @@ -296,6 +296,7 @@ int CHAMELEON_zgeqrf_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c index cb7280422..17f2a2a3d 100644 --- a/compute/zgeqrf_param.c +++ b/compute/zgeqrf_param.c @@ -307,6 +307,7 @@ int CHAMELEON_zgeqrf_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c index 4d7942269..dc42e323f 100644 --- a/compute/zgeqrs.c +++ b/compute/zgeqrs.c @@ -334,6 +334,7 @@ int CHAMELEON_zgeqrs_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *B, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c index 66db5b743..306ea555c 100644 --- a/compute/zgeqrs_param.c +++ b/compute/zgeqrs_param.c @@ -335,6 +335,7 @@ int CHAMELEON_zgeqrs_param_Tile_Async( const libhqr_tree_t *qrtree, CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c index 90a800eb1..7494b34cf 100644 --- a/compute/zgesv_incpiv.c +++ b/compute/zgesv_incpiv.c @@ -331,6 +331,7 @@ int CHAMELEON_zgesv_incpiv_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *L, int *IPIV CHAMELEON_Desc_Flush( Dptr, sequence ); CHAMELEON_Desc_Flush( B, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgesvd.c b/compute/zgesvd.c index de759169c..7b8e96a93 100644 --- a/compute/zgesvd.c +++ b/compute/zgesvd.c @@ -632,6 +632,7 @@ int CHAMELEON_zgesvd_Tile_Async( cham_job_t jobu, cham_job_t jobvt, free(E); if ( Dptr ) { + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c index bdd9c476c..0a68aa402 100644 --- a/compute/zgetrf_incpiv.c +++ b/compute/zgetrf_incpiv.c @@ -298,6 +298,7 @@ int CHAMELEON_zgetrf_incpiv_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *L, int *IPI CHAMELEON_Desc_Flush( L, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zheevd.c b/compute/zheevd.c index a203a877c..505bb279a 100644 --- a/compute/zheevd.c +++ b/compute/zheevd.c @@ -535,6 +535,7 @@ int CHAMELEON_zheevd_Tile_Async( cham_job_t jobz, cham_uplo_t uplo, free(V); free(E); if (Dptr != NULL) { + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zhetrd.c b/compute/zhetrd.c index 660bd5b91..e3d43c5e0 100644 --- a/compute/zhetrd.c +++ b/compute/zhetrd.c @@ -430,6 +430,7 @@ int CHAMELEON_zhetrd_Tile_Async( cham_job_t jobz, } #endif /* !defined(CHAMELEON_SIMULATION) */ if (Dptr != NULL) { + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } chameleon_desc_mat_free( &descAB ); diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c index f3a65b6a6..a89ef3dbb 100644 --- a/compute/ztpgqrt.c +++ b/compute/ztpgqrt.c @@ -426,6 +426,7 @@ int CHAMELEON_ztpgqrt_Tile_Async( int L, CHAMELEON_Desc_Flush( Q2, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zunglq.c b/compute/zunglq.c index e40953f9c..63ff7233b 100644 --- a/compute/zunglq.c +++ b/compute/zunglq.c @@ -322,6 +322,7 @@ int CHAMELEON_zunglq_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *Q, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c index fefc20d57..10855cc2d 100644 --- a/compute/zunglq_param.c +++ b/compute/zunglq_param.c @@ -321,6 +321,7 @@ int CHAMELEON_zunglq_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zungqr.c b/compute/zungqr.c index 25b4e8375..dae14adb3 100644 --- a/compute/zungqr.c +++ b/compute/zungqr.c @@ -319,6 +319,7 @@ int CHAMELEON_zungqr_Tile_Async( CHAM_desc_t *A, CHAM_desc_t *T, CHAM_desc_t *Q, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c index 6dd11ada6..52f3b857f 100644 --- a/compute/zungqr_param.c +++ b/compute/zungqr_param.c @@ -319,6 +319,7 @@ int CHAMELEON_zungqr_param_Tile_Async( const libhqr_tree_t *qrtree, CHAM_desc_t CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zunmlq.c b/compute/zunmlq.c index 6d246cd57..89e0ca1dc 100644 --- a/compute/zunmlq.c +++ b/compute/zunmlq.c @@ -383,6 +383,7 @@ int CHAMELEON_zunmlq_Tile_Async( cham_side_t side, cham_trans_t trans, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c index 9eda1ebc7..1ddd96335 100644 --- a/compute/zunmlq_param.c +++ b/compute/zunmlq_param.c @@ -382,6 +382,7 @@ int CHAMELEON_zunmlq_param_Tile_Async( const libhqr_tree_t *qrtree, cham_side_t CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zunmqr.c b/compute/zunmqr.c index b6f1e1691..5f275c61b 100644 --- a/compute/zunmqr.c +++ b/compute/zunmqr.c @@ -390,6 +390,7 @@ int CHAMELEON_zunmqr_Tile_Async( cham_side_t side, cham_trans_t trans, CHAMELEON_Desc_Flush( T, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c index e53ed50a7..cc1c09c50 100644 --- a/compute/zunmqr_param.c +++ b/compute/zunmqr_param.c @@ -389,6 +389,7 @@ int CHAMELEON_zunmqr_param_Tile_Async( const libhqr_tree_t *qrtree, CHAMELEON_Desc_Flush( TT, sequence ); CHAMELEON_Desc_Flush( Dptr, sequence ); chameleon_sequence_wait( chamctxt, sequence ); + RUNTIME_desc_destroy( Dptr ); chameleon_desc_mat_free( Dptr ); } (void)D; -- GitLab