Skip to content

Commit baa3c1a

Browse files
authored
Merge pull request #211 from mohabsafey/memory-leak-change-order
Fixes memory leak in change order
2 parents 2a2e0eb + a378c11 commit baa3c1a

2 files changed

Lines changed: 17 additions & 33 deletions

File tree

src/msolve/main.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ int main(int argc, char **argv){
438438
}
439439

440440
/* data structures for parametrization */
441-
param_t *param = NULL;
441+
param_t *param = NULL; //malloc(sizeof(param_t));
442442
mpz_param_t *mpz_paramp = malloc(sizeof(mpz_param_t));
443443
mpz_param_init(*mpz_paramp);
444444

@@ -456,7 +456,9 @@ int main(int argc, char **argv){
456456
&param, mpz_paramp, &nb_real_roots, &real_roots, &real_pts);
457457

458458
/* free parametrization */
459-
free(param);
459+
if(param != NULL && gens->field_char){
460+
free_fglm_param(param);
461+
}
460462
mpz_param_clear(*mpz_paramp);
461463

462464
if (nb_real_roots > 0) {

src/msolve/msolve.c

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2087,6 +2087,7 @@ int msolve_trace_qq(mpz_param_t *mpz_paramp,
20872087
files,
20882088
&success);
20892089

2090+
20902091
if (*dim_ptr == 0 && success && *dquot_ptr > 0 && print_gb == 0) {
20912092
if (nmod_params[0]->elim->length - 1 != *dquot_ptr) {
20922093
for (int i = 0; i < nr_vars - 1; i++) {
@@ -2105,8 +2106,9 @@ int msolve_trace_qq(mpz_param_t *mpz_paramp,
21052106
free(bs);
21062107
if (gens->field_char == 0) {
21072108
free_basis(&bs_qq);
2109+
/*nmod_params[0] should not be cleaned here (change of primitive
2110+
* element_*/
21082111
}
2109-
// here we should clean nmod_params
21102112
free_lucky_primes(&lp);
21112113
free(bad_primes);
21122114
free(lp);
@@ -2117,6 +2119,7 @@ int msolve_trace_qq(mpz_param_t *mpz_paramp,
21172119
free(bnlins);
21182120
free(lineqs_ptr);
21192121
free(squvars);
2122+
free(lmb_ori);
21202123
if (print_gb) {
21212124
return 0;
21222125
}
@@ -2129,13 +2132,13 @@ int msolve_trace_qq(mpz_param_t *mpz_paramp,
21292132
for (long j = 0; j <= st->nvars - 2; j++) {
21302133
nmod_poly_set(par->coords[j], nmod_params[0]->coords[j]);
21312134
}
2135+
free_fglm_param(nmod_params[0]);
21322136
(*nmod_param) = par;
21332137
}
21342138
free(st);
21352139
return 0;
21362140
}
21372141
free(st);
2138-
free(nmod_params);
21392142
if (*dim_ptr == 1) {
21402143
if (info_level) {
21412144
fprintf(stderr, "Positive dimensional Grobner basis\n");
@@ -2505,15 +2508,14 @@ int msolve_trace_qq(mpz_param_t *mpz_paramp,
25052508
free_rrec_data(recdata);
25062509
trace_det_clear(trace_det);
25072510

2508-
2509-
// here we should clean nmod_params
2510-
25112511
for (i = 0; i < st->nthrds; ++i) {
25122512
if (bs[i] != NULL) {
25132513
free_basis(&(bs[i]));
25142514
}
25152515
free_fglm_bms_data(bdata_bms[i]);
25162516
free_fglm_data(bdata_fglm[i]);
2517+
2518+
free_fglm_param(nmod_params[i]);
25172519
free(bcfs_extra_nf[i]);
25182520
free(bexps_extra_nf[i]);
25192521
free(blens_extra_nf[i]);
@@ -2530,7 +2532,6 @@ int msolve_trace_qq(mpz_param_t *mpz_paramp,
25302532
free(leadmons_ori[i]);
25312533
free(leadmons_current[i]);
25322534
/* free_trace(&btrace[i]); */
2533-
free(nmod_params[i]);
25342535

25352536
free(blinvars[i]);
25362537
free(lineqs_ptr[i]);
@@ -2545,6 +2546,7 @@ int msolve_trace_qq(mpz_param_t *mpz_paramp,
25452546
free(leadmons_ori);
25462547
free(leadmons_current);
25472548
free(nmod_params);
2549+
free(lmb_ori);
25482550

25492551
free_lucky_primes(&lp);
25502552
free_trace(&(st->tr));
@@ -4047,7 +4049,7 @@ int core_msolve(
40474049
print_gb=2;
40484050
}
40494051
b = real_msolve_qq(mpz_paramp,
4050-
&param,
4052+
paramp,
40514053
&dim,
40524054
&dquot,
40534055
nb_real_roots_ptr,
@@ -4062,34 +4064,12 @@ int core_msolve(
40624064
return 0;
40634065
}
40644066

4065-
manage_output(b, dim, dquot, files, gens, param, mpz_paramp, get_param,
4067+
manage_output(b, dim, dquot, files, gens, (*paramp), mpz_paramp, get_param,
40664068
nb_real_roots_ptr,
40674069
real_roots_ptr,
40684070
real_pts_ptr,
40694071
info_level);
40704072

4071-
4072-
/* if (b == 0 && gens->field_char > 0) { */
4073-
/* if(dim == 0){ */
4074-
/* if(files->out_file != NULL){ */
4075-
/* FILE *ofile = fopen(files->out_file, "a"); */
4076-
/* if(dquot == 0){ */
4077-
/* fprintf(ofile, "[-1]:\n"); */
4078-
/* return 0; */
4079-
/* } */
4080-
/* display_fglm_param_maple(ofile, param); */
4081-
/* fclose(ofile); */
4082-
/* } */
4083-
/* else{ */
4084-
/* if(dquot == 0){ */
4085-
/* fprintf(stdout, "[-1]:\n"); */
4086-
/* return 0; */
4087-
/* } */
4088-
/* display_fglm_param_maple(stdout, param); */
4089-
/* } */
4090-
/* return 0; */
4091-
/* } */
4092-
/* } */
40934073
if (b == 1) {
40944074
free(bld);
40954075
bld = NULL;
@@ -5080,7 +5060,9 @@ void msolve_julia(
50805060
*rp_var_namesp = rp_var_names;
50815061

50825062
/* free parametrization */
5083-
free(param);
5063+
if(param != NULL && gens->field_char){
5064+
free_fglm_param(param);
5065+
}
50845066
mpz_param_clear(mpz_param);
50855067

50865068
*n_real_sols = nb_real_roots;

0 commit comments

Comments
 (0)