X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fstats%2Fregression.c;h=cb2c3ff31bd2cd77334f38922c3b3b80ad9314c0;hb=3cd65292e3cc6bd6532214dcc8c8ddc65bdc2972;hp=0a2e2a8cf67c08fae3bdd26f658654176f63e348;hpb=b9295616cd1beacf0c05eb2b52e9145e9e42fc0a;p=pspp diff --git a/src/language/stats/regression.c b/src/language/stats/regression.c index 0a2e2a8cf6..cb2c3ff31b 100644 --- a/src/language/stats/regression.c +++ b/src/language/stats/regression.c @@ -196,16 +196,15 @@ reg_get_name (const struct dictionary *dict, const char *prefix) static bool regression_trns_free (void *t_) { - bool result = true; struct reg_trns *t = t_; if (t->trns_id == t->n_trns) { - result = linreg_free (t->c); + linreg_unref (t->c); } free (t); - return result; + return true; } static void @@ -249,6 +248,7 @@ subcommand_save (const struct regression *cmd) { if ((*lc)->depvar != NULL) { + (*lc)->refcnt++; if (cmd->resid) { reg_save_var (cmd->ds, "RES", regression_trns_resid_proc, *lc, @@ -267,6 +267,7 @@ subcommand_save (const struct regression *cmd) int cmd_regression (struct lexer *lexer, struct dataset *ds) { + int k; struct regression regression; const struct dictionary *dict = dataset_dict (ds); @@ -400,12 +401,24 @@ cmd_regression (struct lexer *lexer, struct dataset *ds) } if (regression.pred || regression.resid ) - subcommand_save (®ression); + { + subcommand_save (®ression); + } + for (k = 0; k < regression.n_dep_vars; k++) + linreg_unref (regression.models[k]); + free (regression.models); + free (regression.vars); + free (regression.dep_vars); return CMD_SUCCESS; error: + for (k = 0; k < regression.n_dep_vars; k++) + linreg_unref (regression.models[k]); + free (regression.models); + free (regression.vars); + free (regression.dep_vars); return CMD_FAILURE; } @@ -671,10 +684,10 @@ run_regression (const struct regression *cmd, struct casereader *input) } else { - msg (SE, + msg (SE, _("No valid data found. This command was skipped.")); - linreg_free (models[k]); - models[k] = NULL; + linreg_unref (models[k]); + models[k] = NULL; } gsl_matrix_free (this_cm); }