summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Dachary <ldachary@redhat.com>2014-12-15 12:08:37 +0100
committerLoic Dachary <ldachary@redhat.com>2014-12-25 01:59:13 +0100
commit9f580be227ab52566a0ad9f1f823208b765362d3 (patch)
treee2437f9abe263cd2340eac5fb42e9c21c6c51cb1
parent7313600fc1c63234b51413721afaafedd36359c4 (diff)
downloadjerasure-9f580be227ab52566a0ad9f1f823208b765362d3.tar.gz
use assert(0) instead of exit(1)
When a fatal error (unaligned memory etc.) is detected, jerasure should assert(3) instead of exit(3) to give a chance to the calling program to catch the exception and display a stack trace. Although it is possible for gdb to display the stack trace and break on exit, libraries are not usually expected to terminate the calling program in this way. Signed-off-by: Loic Dachary <loic@dachary.org> (cherry picked from commit 36008101d5fd1e3d19230828c0eb231869569893)
-rw-r--r--src/galois.c31
-rw-r--r--src/jerasure.c13
-rw-r--r--src/reed_sol.c9
3 files changed, 28 insertions, 25 deletions
diff --git a/src/galois.c b/src/galois.c
index 95d72bc..82702db 100644
--- a/src/galois.c
+++ b/src/galois.c
@@ -48,6 +48,7 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <assert.h>
#include "galois.h"
@@ -78,25 +79,25 @@ gf_t* galois_init_field(int w,
if (w <= 0 || w > 32) {
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
- exit(1);
+ assert(0);
}
gfp = (gf_t *) malloc(sizeof(gf_t));
if (!gfp) {
fprintf(stderr, "ERROR -- cannot allocate memory for Galois field w=%d\n", w);
- exit(1);
+ assert(0);
}
scratch_size = gf_scratch_size(w, mult_type, region_type, divide_type, arg1, arg2);
if (!scratch_size) {
fprintf(stderr, "ERROR -- cannot get scratch size for base field w=%d\n", w);
- exit(1);
+ assert(0);
}
scratch_memory = malloc(scratch_size);
if (!scratch_memory) {
fprintf(stderr, "ERROR -- cannot get scratch memory for base field w=%d\n", w);
- exit(1);
+ assert(0);
}
if(!gf_init_hard(gfp,
@@ -111,7 +112,7 @@ gf_t* galois_init_field(int w,
scratch_memory))
{
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
- exit(1);
+ assert(0);
}
gfp_is_composite[w] = 0;
@@ -130,25 +131,25 @@ gf_t* galois_init_composite_field(int w,
if (w <= 0 || w > 32) {
fprintf(stderr, "ERROR -- cannot init composite field for w=%d\n", w);
- exit(1);
+ assert(0);
}
gfp = (gf_t *) malloc(sizeof(gf_t));
if (!gfp) {
fprintf(stderr, "ERROR -- cannot allocate memory for Galois field w=%d\n", w);
- exit(1);
+ assert(0);
}
scratch_size = gf_scratch_size(w, GF_MULT_COMPOSITE, region_type, divide_type, degree, 0);
if (!scratch_size) {
fprintf(stderr, "ERROR -- cannot get scratch size for composite field w=%d\n", w);
- exit(1);
+ assert(0);
}
scratch_memory = malloc(scratch_size);
if (!scratch_memory) {
fprintf(stderr, "ERROR -- cannot get scratch memory for composite field w=%d\n", w);
- exit(1);
+ assert(0);
}
if(!gf_init_hard(gfp,
@@ -163,7 +164,7 @@ gf_t* galois_init_composite_field(int w,
scratch_memory))
{
fprintf(stderr, "ERROR -- cannot init default composite field for w=%d\n", w);
- exit(1);
+ assert(0);
}
gfp_is_composite[w] = 1;
return gfp;
@@ -185,17 +186,17 @@ static void galois_init(int w)
{
if (w <= 0 || w > 32) {
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
- exit(1);
+ assert(0);
}
switch (galois_init_default_field(w)) {
case ENOMEM:
fprintf(stderr, "ERROR -- cannot allocate memory for Galois field w=%d\n", w);
- exit(1);
+ assert(0);
break;
case EINVAL:
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
- exit(1);
+ assert(0);
break;
}
}
@@ -234,12 +235,12 @@ void galois_change_technique(gf_t *gf, int w)
{
if (w <= 0 || w > 32) {
fprintf(stderr, "ERROR -- cannot support Galois field for w=%d\n", w);
- exit(1);
+ assert(0);
}
if (!is_valid_gf(gf, w)) {
fprintf(stderr, "ERROR -- overriding with invalid Galois field for w=%d\n", w);
- exit(1);
+ assert(0);
}
if (gfp_array[w] != NULL) {
diff --git a/src/jerasure.c b/src/jerasure.c
index bb577af..4297653 100644
--- a/src/jerasure.c
+++ b/src/jerasure.c
@@ -47,6 +47,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <assert.h>
#include "galois.h"
#include "jerasure.h"
@@ -303,7 +304,7 @@ void jerasure_matrix_encode(int k, int m, int w, int *matrix,
if (w != 8 && w != 16 && w != 32) {
fprintf(stderr, "ERROR: jerasure_matrix_encode() and w is not 8, 16 or 32\n");
- exit(1);
+ assert(0);
}
for (i = 0; i < m; i++) {
@@ -320,7 +321,7 @@ void jerasure_bitmatrix_dotprod(int k, int w, int *bitmatrix_row,
if (size%(w*packetsize) != 0) {
fprintf(stderr, "jerasure_bitmatrix_dotprod - size%c(w*packetsize)) must = 0\n", '%');
- exit(1);
+ assert(0);
}
bpptr = (dest_id < k) ? data_ptrs[dest_id] : coding_ptrs[dest_id-k];
@@ -559,7 +560,7 @@ void jerasure_free_schedule_cache(int k, int m, int ***cache)
if (m != 2) {
fprintf(stderr, "jerasure_free_schedule_cache(): m must equal 2\n");
- exit(1);
+ assert(0);
}
for (e1 = 0; e1 < k+m; e1++) {
@@ -581,7 +582,7 @@ void jerasure_matrix_dotprod(int k, int w, int *matrix_row,
if (w != 1 && w != 8 && w != 16 && w != 32) {
fprintf(stderr, "ERROR: jerasure_matrix_dotprod() called and w is not 1, 8, 16 or 32\n");
- exit(1);
+ assert(0);
}
init = 0;
@@ -1359,12 +1360,12 @@ void jerasure_bitmatrix_encode(int k, int m, int w, int *bitmatrix,
if (packetsize%sizeof(long) != 0) {
fprintf(stderr, "jerasure_bitmatrix_encode - packetsize(%d) %c sizeof(long) != 0\n", packetsize, '%');
- exit(1);
+ assert(0);
}
if (size%(packetsize*w) != 0) {
fprintf(stderr, "jerasure_bitmatrix_encode - size(%d) %c (packetsize(%d)*w(%d))) != 0\n",
size, '%', packetsize, w);
- exit(1);
+ assert(0);
}
for (i = 0; i < m; i++) {
diff --git a/src/reed_sol.c b/src/reed_sol.c
index c0dfe83..82edacb 100644
--- a/src/reed_sol.c
+++ b/src/reed_sol.c
@@ -47,6 +47,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <assert.h>
#include <gf_complete.h>
#include "galois.h"
@@ -107,7 +108,7 @@ void reed_sol_galois_w08_region_multby_2(char *region, int nbytes)
if (!gf_init_hard(&GF08, 8, GF_MULT_BYTWO_b, GF_REGION_DEFAULT, GF_DIVIDE_DEFAULT,
prim08, 0, 0, NULL, NULL)) {
fprintf(stderr, "Error: Can't initialize the GF for reed_sol_galois_w08_region_multby_2\n");
- exit(1);
+ assert(0);
}
}
GF08.multiply_region.w32(&GF08, region, region, 2, nbytes, 0);
@@ -123,7 +124,7 @@ void reed_sol_galois_w16_region_multby_2(char *region, int nbytes)
if (!gf_init_hard(&GF16, 16, GF_MULT_BYTWO_b, GF_REGION_DEFAULT, GF_DIVIDE_DEFAULT,
prim16, 0, 0, NULL, NULL)) {
fprintf(stderr, "Error: Can't initialize the GF for reed_sol_galois_w16_region_multby_2\n");
- exit(1);
+ assert(0);
}
}
GF16.multiply_region.w32(&GF16, region, region, 2, nbytes, 0);
@@ -139,7 +140,7 @@ void reed_sol_galois_w32_region_multby_2(char *region, int nbytes)
if (!gf_init_hard(&GF32, 32, GF_MULT_BYTWO_b, GF_REGION_DEFAULT, GF_DIVIDE_DEFAULT,
prim32, 0, 0, NULL, NULL)) {
fprintf(stderr, "Error: Can't initialize the GF for reed_sol_galois_w32_region_multby_2\n");
- exit(1);
+ assert(0);
}
}
GF32.multiply_region.w32(&GF32, region, region, 2, nbytes, 0);
@@ -223,7 +224,7 @@ int *reed_sol_big_vandermonde_distribution_matrix(int rows, int cols, int w)
if (j >= rows) { /* This should never happen if rows/w are correct */
fprintf(stderr, "reed_sol_big_vandermonde_distribution_matrix(%d,%d,%d) - couldn't make matrix\n",
rows, cols, w);
- exit(1);
+ assert(0);
}
/* If necessary, swap rows */