summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2023-08-30 17:26:56 -0700
committerVito Caputo <vcaputo@pengaru.com>2023-08-30 17:26:56 -0700
commitc91c9e5eeae06a7cbed94354d62c1281dc356407 (patch)
treea589ab8716cba804ec7c60e5882a2eec7f0033b7
parent20d097ab1fe8ef5b62f4169f4353cc0074c27e4b (diff)
modules/*: til_module_context_free() error paths
Several modules still had vestigial ad-hoc free() cleanups on error paths in their create_context(). Largely mechanical change of replacing those with til_module_context_free() which is more appropriate, since the til_module_context_t holds a reference on the setup. A plain free() will leak that reference. But it's only on create_context() failures which are uncommon, so this was in practice mostly harmless...
-rw-r--r--src/modules/drizzle/drizzle.c6
-rw-r--r--src/modules/signals/signals.c30
-rw-r--r--src/modules/sparkler/sparkler.c10
-rw-r--r--src/modules/stars/stars.c3
-rw-r--r--src/modules/swab/swab.c6
5 files changed, 22 insertions, 33 deletions
diff --git a/src/modules/drizzle/drizzle.c b/src/modules/drizzle/drizzle.c
index 54ca204..18ef731 100644
--- a/src/modules/drizzle/drizzle.c
+++ b/src/modules/drizzle/drizzle.c
@@ -110,10 +110,8 @@ static til_module_context_t * drizzle_create_context(const til_module_t *module,
return NULL;
ctxt->puddle = puddle_new(PUDDLE_SIZE, PUDDLE_SIZE);
- if (!ctxt->puddle) {
- free(ctxt);
- return NULL;
- }
+ if (!ctxt->puddle)
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->taps.viscosity = til_tap_init_float(ctxt, &ctxt->viscosity, 1, &ctxt->vars.viscosity, "viscosity");
ctxt->taps.rainfall = til_tap_init_float(ctxt, &ctxt->rainfall, 1, &ctxt->vars.rainfall, "rainfall");
diff --git a/src/modules/signals/signals.c b/src/modules/signals/signals.c
index c56c6f8..76fe4f6 100644
--- a/src/modules/signals/signals.c
+++ b/src/modules/signals/signals.c
@@ -38,7 +38,7 @@ static til_module_context_t * signals_create_context(const til_module_t *module,
ctxt->signals[0] = sig_new_sin(sig_new_const(.5f)); /* oscillate @ .5hz */
if (!ctxt->signals[0])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[1] = sig_new_sin( /* oscillate */
sig_new_scale( /* at a scaled frequency */
@@ -48,7 +48,7 @@ static til_module_context_t * signals_create_context(const til_module_t *module,
)
);
if (!ctxt->signals[1])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[2] = sig_new_lerp( /* interpolate */
sig_new_sin(sig_new_const(.33f)), /* a .33hz oscillator */
@@ -56,21 +56,21 @@ static til_module_context_t * signals_create_context(const til_module_t *module,
sig_new_sin(sig_new_const(2.f)) /* weighted by a 2hz oscillator */
);
if (!ctxt->signals[2])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[3] = sig_new_pow( /* raise */
sig_new_sin(sig_new_const(4.f)), /* a 4hz oscillator */
sig_new_sin(sig_new_const(.33f)) /* to the power of a .33f hz oscillator */
);
if (!ctxt->signals[3])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[4] = sig_new_mult( /* multiply */
sig_new_sin(sig_new_const(4.f)), /* a 4hz oscillator */
sig_new_sin(sig_new_const(1.f)) /* by a 1hz oscillator */
);
if (!ctxt->signals[4])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[5] = sig_new_lerp( /* interpolate */
sig_ref(ctxt->signals[3]), /* signals[3] */
@@ -78,7 +78,7 @@ static til_module_context_t * signals_create_context(const til_module_t *module,
sig_ref(ctxt->signals[2]) /* weighted by signals[2] */
);
if (!ctxt->signals[5])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[6] = sig_new_lerp( /* interpolate */
sig_new_inv(sig_ref(ctxt->signals[5])), /* invert of signals[5] */
@@ -87,21 +87,21 @@ static til_module_context_t * signals_create_context(const til_module_t *module,
sig_ref(ctxt->signals[2]) /* weighted by signals[2] */
);
if (!ctxt->signals[6])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[7] = sig_new_mult( /* multiply */
sig_ref(ctxt->signals[6]), /* signals[6] */
sig_ref(ctxt->signals[5]) /* signals[5] */
);
if (!ctxt->signals[7])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[8] = sig_new_mult( /* multiply */
sig_ref(ctxt->signals[1]), /* signals[1] */
sig_ref(ctxt->signals[7]) /* signals[7] */
);
if (!ctxt->signals[8])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[9] = sig_new_pow( /* raise */
sig_ref(ctxt->signals[3]), /* signals[3] */
@@ -112,7 +112,7 @@ static til_module_context_t * signals_create_context(const til_module_t *module,
)
);
if (!ctxt->signals[9])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
ctxt->signals[10] = sig_new_lerp( /* interpolate */
sig_ref(ctxt->signals[9]), /* signals[9] */
@@ -125,17 +125,9 @@ static til_module_context_t * signals_create_context(const til_module_t *module,
)
);
if (!ctxt->signals[10])
- goto err;
+ return til_module_context_free(&ctxt->til_module_context);
return &ctxt->til_module_context;
-
-err:
- for (unsigned i = 0; i < N_SIGNALS; i++)
- sig_free(ctxt->signals[i]);
-
- free(ctxt);
-
- return NULL;
}
diff --git a/src/modules/sparkler/sparkler.c b/src/modules/sparkler/sparkler.c
index 76f1c9b..e37257c 100644
--- a/src/modules/sparkler/sparkler.c
+++ b/src/modules/sparkler/sparkler.c
@@ -50,10 +50,8 @@ static til_module_context_t * sparkler_create_context(const til_module_t *module
.show_bsp_matches_affected_only = ((sparkler_setup_t *)setup)->show_bsp_matches_affected_only,
.seedp = &ctxt->til_module_context.seed,
});
- if (!ctxt->particles) {
- free(ctxt);
- return NULL;
- }
+ if (!ctxt->particles)
+ return til_module_context_free(&ctxt->til_module_context);
particles_add_particles(ctxt->particles, NULL, &simple_ops, INIT_PARTS, 0);
@@ -65,7 +63,9 @@ static void sparkler_destroy_context(til_module_context_t *context)
{
sparkler_context_t *ctxt = (sparkler_context_t *)context;
- particles_free(ctxt->particles);
+ if (ctxt->particles)
+ particles_free(ctxt->particles);
+
free(ctxt);
}
diff --git a/src/modules/stars/stars.c b/src/modules/stars/stars.c
index bff3d8f..ef35c4e 100644
--- a/src/modules/stars/stars.c
+++ b/src/modules/stars/stars.c
@@ -123,7 +123,8 @@ static til_module_context_t * stars_create_context(const til_module_t *module, t
for(int i=0; i<rand_r(&ctxt->seed)%16; i++){
p_ptr = malloc(sizeof(struct points));
if (!p_ptr)
- return NULL;
+ return til_module_context_free(&ctxt->til_module_context);
+
p_ptr->x = get_random_unit_coord(&ctxt->seed);
p_ptr->y = get_random_unit_coord(&ctxt->seed);
p_ptr->z = z;
diff --git a/src/modules/swab/swab.c b/src/modules/swab/swab.c
index 9b7043c..343eb04 100644
--- a/src/modules/swab/swab.c
+++ b/src/modules/swab/swab.c
@@ -75,10 +75,8 @@ static til_module_context_t * swab_create_context(const til_module_t *module, ti
return NULL;
ctxt->din = din_new(12, 12, 100, seed);
- if (!ctxt->din) {
- free(ctxt);
- return NULL;
- }
+ if (!ctxt->din)
+ return til_module_context_free(&ctxt->til_module_context);
return &ctxt->til_module_context;
}
© All Rights Reserved