aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gc.c7
-rw-r--r--gc.h3
-rw-r--r--thread.c2
3 files changed, 11 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index d39d14d709..ce80ccff7f 100644
--- a/gc.c
+++ b/gc.c
@@ -6651,6 +6651,13 @@ rb_during_gc(void)
return during_gc;
}
+int
+rb_threadptr_during_gc(rb_thread_t *th)
+{
+ rb_objspace_t *objspace = rb_objspace_of(th->vm);
+ return during_gc;
+}
+
#if RGENGC_PROFILE >= 2
static const char *type_name(int type, VALUE obj);
diff --git a/gc.h b/gc.h
index c723106137..f5e3731d24 100644
--- a/gc.h
+++ b/gc.h
@@ -90,6 +90,9 @@ const char *rb_obj_info(VALUE obj);
const char *rb_raw_obj_info(char *buff, const int buff_size, VALUE obj);
void rb_obj_info_dump(VALUE obj);
+struct rb_thread_struct;
+int rb_threadptr_during_gc(struct rb_thread_struct *th);
+
RUBY_SYMBOL_EXPORT_BEGIN
/* exports for objspace module */
diff --git a/thread.c b/thread.c
index c34565e9a1..a93c6100bf 100644
--- a/thread.c
+++ b/thread.c
@@ -2171,7 +2171,7 @@ ruby_thread_stack_overflow(rb_thread_t *th)
{
th->raised_flag = 0;
#ifdef USE_SIGALTSTACK
- if (!rb_during_gc()) {
+ if (!rb_threadptr_during_gc(th)) {
rb_exc_raise(sysstack_error);
}
#endif