Skip to content

Commit 5a1bbdd

Browse files
authored
Merge pull request #224 from epitavy/resolve-memory-leaks
Solve memory leaks when exporting groebner bases
2 parents 04d3c78 + 3dbcc49 commit 5a1bbdd

5 files changed

Lines changed: 24 additions & 11 deletions

File tree

src/msolve/lifting-gb.c

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -499,18 +499,22 @@ static inline void gb_modpoly_clear(gb_modpoly_t modgbs){
499499
free(modgbs->modpolys[i]->cf_32[j]);
500500
mpz_clear(modgbs->modpolys[i]->cf_zz[j]);
501501
}
502+
502503
for(uint32_t j = 0; j < 2 * modgbs->modpolys[i]->len; j++){
503504
mpz_clear(modgbs->modpolys[i]->cf_qq[j]);
504505
}
506+
505507
mpz_clear(modgbs->modpolys[i]->lm);
506508
free(modgbs->modpolys[i]->cf_32);
507509
free(modgbs->modpolys[i]->cf_zz);
508510
free(modgbs->modpolys[i]->cf_qq);
511+
free(modgbs->hm[i]);
509512
}
513+
510514
free(modgbs->lmps);
511515
free(modgbs->hm);
512-
//free_hash_table(&(modgbs->bht));
513-
free_shared_hash_data(modgbs->bht);
516+
free(modgbs->cf_64);
517+
full_free_hash_table(&modgbs->bht);
514518
free(modgbs->modpolys);
515519
}
516520

@@ -786,6 +790,7 @@ static int32_t gb_modular_trace_learning(gb_modpoly_t modgbs,
786790
else{
787791
gb_modpoly_init(modgbs, 2, lens, bs, bht->nv - st->nev, num_gb[0], leadmons[0], st);
788792
}
793+
free(lens);
789794
modpgbs_set(modgbs, bs, bht, fc, start, st->nev);
790795
int is_empty = 0;
791796
if(bs->lml == 1){
@@ -1756,8 +1761,6 @@ gb_modpoly_t *groebner_qq(
17561761
int32_t nr_vars = gens->nvars;
17571762
int32_t nr_gens = gens->ngens;
17581763
int reduce_gb = 1;
1759-
int32_t nr_nf = 0;
1760-
const uint32_t prime_start = pow(2, 30);
17611764

17621765
/* timings */
17631766
double ct0, ct1, rt0, rt1;
@@ -1778,7 +1781,7 @@ gb_modpoly_t *groebner_qq(
17781781
nr_vars, nr_gens, 0 /* # normal forms */, ht_size,
17791782
nr_threads, max_nr_pairs, reset_ht, la_option, use_signatures,
17801783
reduce_gb, pbm_file, truncate_lifting, info_level);
1781-
1784+
17821785
/* all input generators are invalid */
17831786
if (success == -1) {
17841787
return NULL;
@@ -1808,7 +1811,8 @@ gb_modpoly_t *groebner_qq(
18081811

18091812
/* free and clean up */
18101813
free_mstrace(msd, md);
1811-
1814+
free_basis_without_hash_table(&bs);
1815+
free_trace(&md->tr);
18121816
free(md);
18131817
md = NULL;
18141818

@@ -1975,14 +1979,17 @@ int64_t export_groebner_qq(
19751979

19761980
/* free and clean up */
19771981
free_mstrace(msd, md);
1982+
free_basis_without_hash_table(&bs);
1983+
free_trace(&md->tr);
19781984
free(md);
19791985
md = NULL;
19801986

19811987
int64_t nterms = export_results_from_groebner_qq(bld, blen, bexp,
19821988
bcf, mallocp, elim_block_len, (*modgbsp));
19831989

1984-
gb_modpoly_clear((*modgbsp));
1985-
1990+
gb_modpoly_clear(*modgbsp);
1991+
free(modgbsp);
1992+
19861993
return nterms;
19871994

19881995
}

src/msolve/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,7 @@ int main(int argc, char **argv){
460460
free_fglm_param(param);
461461
}
462462
mpz_param_clear(*mpz_paramp);
463+
free(mpz_paramp);
463464

464465
if (nb_real_roots > 0) {
465466
for(long i = 0; i < nb_real_roots; i++){

src/msolve/msolve.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4760,6 +4760,12 @@ int core_msolve(
47604760
flags->files = files;
47614761

47624762
print_msolve_gbtrace_qq(gens, flags);
4763+
4764+
free(bld);
4765+
free(blen);
4766+
free(bexp);
4767+
free(bcf);
4768+
47634769
return 0;
47644770
}
47654771

src/neogb/hash.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,7 @@ ht_t *copy_hash_table(
148148
ht->bpv = bht->bpv;
149149
ht->dm = bht->dm;
150150
ht->rn = bht->rn;
151-
152-
ht->dv = (len_t *)calloc((unsigned long)ht->ndv, sizeof(len_t));
153-
memcpy(ht->dv, bht->dv, (unsigned long)ht->ndv * sizeof(len_t));
151+
ht->dv = bht->dv;
154152

155153
/* generate exponent vector */
156154
/* keep first entry empty for faster divisibility checks */

src/neogb/io.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@ void import_input_data(
400400
}
401401
off += lens[i];
402402
}
403+
mpz_clears(prod_den, mul, NULL);
403404
break;
404405
default:
405406
exit(1);

0 commit comments

Comments
 (0)