From 849df8b6dd7de1d45eaf8af1f4f2b1c1d72e5c9c Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 11 Jul 2012 22:54:53 +0200 Subject: Fix a load of memory leaks --- src/indexamajig.c | 154 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 109 insertions(+), 45 deletions(-) (limited to 'src/indexamajig.c') diff --git a/src/indexamajig.c b/src/indexamajig.c index 1db8b353..33caddfa 100644 --- a/src/indexamajig.c +++ b/src/indexamajig.c @@ -99,14 +99,12 @@ struct index_args int cellr; float tols[4]; struct beam_params *beam; - const char *element; - const char *hdf5_peak_path; + char *element; + char *hdf5_peak_path; double ir_inn; double ir_mid; double ir_out; - - /* Output stream */ - const struct copy_hdf5_field *copyme; + struct copy_hdf5_field *copyme; }; @@ -366,11 +364,8 @@ static void process_image(const struct index_args *iargs, case PEAK_ZAEF: search_peaks(&image, iargs->threshold, - iargs->min_gradient, - iargs->min_snr, - iargs->ir_inn, - iargs->ir_mid, - iargs->ir_out); + iargs->min_gradient, iargs->min_snr, + iargs->ir_inn, iargs->ir_mid, iargs->ir_out); break; } @@ -483,9 +478,20 @@ static void run_work(const struct index_args *iargs, free(line); } + /* close my pipes */ fclose(fh); close(results_pipe); + + cleanup_indexing(iargs->ipriv); + free(iargs->indm); + free(iargs->ipriv); + free_detector_geometry(iargs->det); + free(iargs->beam); + free(iargs->element); + free(iargs->hdf5_peak_path); + free_copy_hdf5_field_list(iargs->copyme); + cell_free(iargs->cell); } @@ -616,10 +622,13 @@ static void run_reader(int *stream_pipe_read, int n_proc, FILE *ofh) if ( feof(fhs[i]) ) { /* Process died */ finished[i] = 1; + ERROR("EOF during chunk\n"); } else { ERROR("fgets() failed: %s\n", strerror(errno)); } + fprintf(ofh, "Chunk is unfinished!\n"); + chunk_finished = 1; continue; } @@ -646,6 +655,9 @@ static void run_reader(int *stream_pipe_read, int n_proc, FILE *ofh) for ( i=0; i