summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTim Burke <tim.burke@gmail.com>2017-01-25 23:40:32 +0000
committerTim Burke <tim.burke@gmail.com>2017-03-16 17:49:49 +0000
commit842b4a9bd71f0ee6390bf3ace71666a9acc017fd (patch)
tree32af62e274402736f7c6ba4182ebc86407fd2c7a /src
parent4ab1336cabe0c1f5d7fc18c21b78f5d21aca5b60 (diff)
downloadliberasurecode-842b4a9bd71f0ee6390bf3ace71666a9acc017fd.tar.gz
Jerasure: Handle initialization errors correctly
Otherwise we can get backtraces where we try to free something that was never initialized. Change-Id: Iaea427b977fd20819e2da5678cc4889d3a42dd65
Diffstat (limited to 'src')
-rw-r--r--src/backends/jerasure/jerasure_rs_cauchy.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backends/jerasure/jerasure_rs_cauchy.c b/src/backends/jerasure/jerasure_rs_cauchy.c
index 6400ca2..d5787ef 100644
--- a/src/backends/jerasure/jerasure_rs_cauchy.c
+++ b/src/backends/jerasure/jerasure_rs_cauchy.c
@@ -357,17 +357,21 @@ static void * jerasure_rs_cauchy_init(struct ec_backend_args *args,
}
desc->bitmatrix = desc->jerasure_matrix_to_bitmatrix(k, m, w, desc->matrix);
if (NULL == desc->bitmatrix) {
- goto error;
+ goto bitmatrix_error;
}
desc->schedule = desc->jerasure_smart_bitmatrix_to_schedule(k, m, w, desc->bitmatrix);
if (NULL == desc->schedule) {
- goto error;
+ goto schedule_error;
}
return desc;
+schedule_error:
+ free(desc->bitmatrix);
+bitmatrix_error:
+ free(desc->matrix);
error:
- free_rs_cauchy_desc(desc);
+ free(desc);
return NULL;
}