cont.c: avoid needless branch for dmark callbacks
gc.c (gc_mark_children, case T_DATA) does not use the dmark function pointer if DATA_PTR is NULL * cont.c (cont_mark, fiber_mark): remove branch, ptr is never NULL git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ba77cb7c23
commit
d6de5804ea
78
cont.c
78
cont.c
@ -170,48 +170,48 @@ NOINLINE(static VALUE cont_capture(volatile int *volatile stat));
|
|||||||
static void
|
static void
|
||||||
cont_mark(void *ptr)
|
cont_mark(void *ptr)
|
||||||
{
|
{
|
||||||
|
rb_context_t *cont = ptr;
|
||||||
|
|
||||||
RUBY_MARK_ENTER("cont");
|
RUBY_MARK_ENTER("cont");
|
||||||
if (ptr) {
|
rb_gc_mark(cont->value);
|
||||||
rb_context_t *cont = ptr;
|
|
||||||
rb_gc_mark(cont->value);
|
|
||||||
|
|
||||||
rb_thread_mark(&cont->saved_thread);
|
rb_thread_mark(&cont->saved_thread);
|
||||||
rb_gc_mark(cont->saved_thread.self);
|
rb_gc_mark(cont->saved_thread.self);
|
||||||
|
|
||||||
if (cont->vm_stack) {
|
if (cont->vm_stack) {
|
||||||
#ifdef CAPTURE_JUST_VALID_VM_STACK
|
#ifdef CAPTURE_JUST_VALID_VM_STACK
|
||||||
rb_gc_mark_locations(cont->vm_stack,
|
rb_gc_mark_locations(cont->vm_stack,
|
||||||
cont->vm_stack + cont->vm_stack_slen + cont->vm_stack_clen);
|
cont->vm_stack + cont->vm_stack_slen + cont->vm_stack_clen);
|
||||||
#else
|
#else
|
||||||
rb_gc_mark_locations(cont->vm_stack,
|
rb_gc_mark_locations(cont->vm_stack,
|
||||||
cont->vm_stack, cont->saved_thread.stack_size);
|
cont->vm_stack, cont->saved_thread.stack_size);
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cont->machine.stack) {
|
|
||||||
if (cont->type == CONTINUATION_CONTEXT) {
|
|
||||||
/* cont */
|
|
||||||
rb_gc_mark_locations(cont->machine.stack,
|
|
||||||
cont->machine.stack + cont->machine.stack_size);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* fiber */
|
|
||||||
rb_thread_t *th;
|
|
||||||
rb_fiber_t *fib = (rb_fiber_t*)cont;
|
|
||||||
GetThreadPtr(cont->saved_thread.self, th);
|
|
||||||
if ((th->fiber != fib) && fib->status == RUNNING) {
|
|
||||||
rb_gc_mark_locations(cont->machine.stack,
|
|
||||||
cont->machine.stack + cont->machine.stack_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef __ia64
|
|
||||||
if (cont->machine.register_stack) {
|
|
||||||
rb_gc_mark_locations(cont->machine.register_stack,
|
|
||||||
cont->machine.register_stack + cont->machine.register_stack_size);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cont->machine.stack) {
|
||||||
|
if (cont->type == CONTINUATION_CONTEXT) {
|
||||||
|
/* cont */
|
||||||
|
rb_gc_mark_locations(cont->machine.stack,
|
||||||
|
cont->machine.stack + cont->machine.stack_size);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* fiber */
|
||||||
|
rb_thread_t *th;
|
||||||
|
rb_fiber_t *fib = (rb_fiber_t*)cont;
|
||||||
|
GetThreadPtr(cont->saved_thread.self, th);
|
||||||
|
if ((th->fiber != fib) && fib->status == RUNNING) {
|
||||||
|
rb_gc_mark_locations(cont->machine.stack,
|
||||||
|
cont->machine.stack + cont->machine.stack_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef __ia64
|
||||||
|
if (cont->machine.register_stack) {
|
||||||
|
rb_gc_mark_locations(cont->machine.register_stack,
|
||||||
|
cont->machine.register_stack + cont->machine.register_stack_size);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
RUBY_MARK_LEAVE("cont");
|
RUBY_MARK_LEAVE("cont");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,12 +307,10 @@ rb_fiber_mark_self(rb_fiber_t *fib)
|
|||||||
static void
|
static void
|
||||||
fiber_mark(void *ptr)
|
fiber_mark(void *ptr)
|
||||||
{
|
{
|
||||||
|
rb_fiber_t *fib = ptr;
|
||||||
RUBY_MARK_ENTER("cont");
|
RUBY_MARK_ENTER("cont");
|
||||||
if (ptr) {
|
rb_fiber_mark_self(fib->prev);
|
||||||
rb_fiber_t *fib = ptr;
|
cont_mark(&fib->cont);
|
||||||
rb_fiber_mark_self(fib->prev);
|
|
||||||
cont_mark(&fib->cont);
|
|
||||||
}
|
|
||||||
RUBY_MARK_LEAVE("cont");
|
RUBY_MARK_LEAVE("cont");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user