diff --git a/c/srfi/srfi-27.c b/c/srfi/srfi-27.c index 2e5eab5..77c83e7 100644 --- a/c/srfi/srfi-27.c +++ b/c/srfi/srfi-27.c @@ -117,6 +117,12 @@ static double mrg32k3a(state_t *s) { /* (double), in {0..m1-1} */ s48_value mrg32k3a_pack_state1(s48_value state) { s48_value result; state_t s; + S48_DECLARE_GC_PROTECT(1); + + S48_GC_PROTECT_1(state); /* s48_extract_integer may GC */ + + result = S48_MAKE_VALUE(state_t); + #define REF(i) (double)s48_extract_integer(S48_VECTOR_REF(state, (long)(i))) @@ -130,6 +136,8 @@ s48_value mrg32k3a_pack_state1(s48_value state) { #undef REF + S48_GC_UNPROTECT(); + /* box s into a Scheme object */ result = S48_MAKE_VALUE(state_t); S48_SET_VALUE(result, state_t, s); @@ -137,9 +145,12 @@ s48_value mrg32k3a_pack_state1(s48_value state) { } s48_value mrg32k3a_unpack_state1(s48_value state) { - s48_value result; + s48_value result = S48_UNSPECIFIC; state_t s; + S48_DECLARE_GC_PROTECT(1); + S48_GC_PROTECT_1(result); + /* unbox s from the Scheme object */ s = S48_EXTRACT_VALUE(state, state_t); @@ -161,6 +172,8 @@ s48_value mrg32k3a_unpack_state1(s48_value state) { #undef SET + S48_GC_UNPROTECT(); + return result; }