diff --git a/eval.c b/eval.c index 4adeb4ce54..833b9b0428 100644 --- a/eval.c +++ b/eval.c @@ -7149,7 +7149,11 @@ rb_thread_schedule() } FOREACH_THREAD_FROM(curr, th) { - if (th->status <= THREAD_RUNNABLE) { + if (th->status == THREAD_TO_KILL) { + next = th; + break; + } + if (th->status == THREAD_RUNNABLE) { if (!next || next->priority < th->priority) next = th; } diff --git a/gc.c b/gc.c index 8533773d3a..a7e272f257 100644 --- a/gc.c +++ b/gc.c @@ -753,19 +753,27 @@ obj_free(obj) break; case T_STRING: #define STR_NO_ORIG FL_USER2 /* copied from string.c */ - if (!RANY(obj)->as.string.orig || FL_TEST(obj, STR_NO_ORIG)) + if (!RANY(obj)->as.string.orig || FL_TEST(obj, STR_NO_ORIG)) { free(RANY(obj)->as.string.ptr); + } break; case T_ARRAY: - if (RANY(obj)->as.array.ptr) free(RANY(obj)->as.array.ptr); + if (RANY(obj)->as.array.ptr) { + free(RANY(obj)->as.array.ptr); + } break; case T_HASH: - if (RANY(obj)->as.hash.tbl) + if (RANY(obj)->as.hash.tbl) { st_free_table(RANY(obj)->as.hash.tbl); + } break; case T_REGEXP: - if (RANY(obj)->as.regexp.ptr) re_free_pattern(RANY(obj)->as.regexp.ptr); - if (RANY(obj)->as.regexp.str) free(RANY(obj)->as.regexp.str); + if (RANY(obj)->as.regexp.ptr) { + re_free_pattern(RANY(obj)->as.regexp.ptr); + } + if (RANY(obj)->as.regexp.str) { + free(RANY(obj)->as.regexp.str); + } break; case T_DATA: if (DATA_PTR(obj)) { @@ -798,7 +806,9 @@ obj_free(obj) break; case T_BIGNUM: - if (RANY(obj)->as.bignum.digits) free(RANY(obj)->as.bignum.digits); + if (RANY(obj)->as.bignum.digits) { + free(RANY(obj)->as.bignum.digits); + } break; case T_NODE: switch (nd_type(obj)) { @@ -827,8 +837,9 @@ obj_free(obj) break; case T_STRUCT: - if (RANY(obj)->as.rstruct.ptr) + if (RANY(obj)->as.rstruct.ptr) { free(RANY(obj)->as.rstruct.ptr); + } break; default: diff --git a/regex.c b/regex.c index f1dcb3b77d..668773fb49 100644 --- a/regex.c +++ b/regex.c @@ -94,7 +94,7 @@ void xfree _((void*)); #else # if defined(HAVE_ALLOCA_H) # include -# else +# elif !defined(alloca) char *alloca(); # endif #endif /* __GNUC__ */