diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-12 14:47:50 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-12 14:47:50 +0000 |
commit | a1caed95cb76fb67c7d22441e052d1114dfc26eb (patch) | |
tree | dfc815a8189a05d74b520b36f7c1786e7b5fb20e | |
parent | 796e9950078c788fd8b6e728f329d4dd3dc0aea0 (diff) |
thread.c: during GC for thread
* thread.c (ruby_thread_stack_overflow): check if the given thread
is during GC.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58328 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | gc.c | 7 | ||||
-rw-r--r-- | gc.h | 3 | ||||
-rw-r--r-- | thread.c | 2 |
3 files changed, 11 insertions, 1 deletions
@@ -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); @@ -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 */ @@ -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 |