summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--cont.c2
-rw-r--r--vm.c1
3 files changed, 7 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 53f0269cca..be69505431 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sun Oct 2 08:43:25 2011 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * vm.c (rb_thread_mark), cont.c (cont_mark): self pointer should not
+ be marked by itself. Patch by Koichi Sasada.
+ [ruby-dev:44567] [Bug #5386]
+
Sun Oct 2 00:42:14 2011 Kazuki Tsujimoto <kazuki@callcc.net>
* vm.c (rb_thread_mark): rb_thread_t needs self to be marked.
diff --git a/cont.c b/cont.c
index 3e68d897ca..bbcf2e184c 100644
--- a/cont.c
+++ b/cont.c
@@ -138,7 +138,7 @@ cont_mark(void *ptr)
if (ptr) {
rb_context_t *cont = ptr;
rb_gc_mark(cont->value);
- rb_thread_mark(&cont->saved_thread);
+ rb_gc_mark(cont->saved_thread.self);
if (cont->vm_stack) {
#ifdef CAPTURE_JUST_VALID_VM_STACK
diff --git a/vm.c b/vm.c
index 2ab2b92fcc..665351be0a 100644
--- a/vm.c
+++ b/vm.c
@@ -1735,7 +1735,6 @@ rb_thread_mark(void *ptr)
RUBY_MARK_UNLESS_NULL(th->first_proc);
if (th->first_proc) RUBY_MARK_UNLESS_NULL(th->first_args);
- RUBY_MARK_UNLESS_NULL(th->self);
RUBY_MARK_UNLESS_NULL(th->thgroup);
RUBY_MARK_UNLESS_NULL(th->value);
RUBY_MARK_UNLESS_NULL(th->errinfo);