Backport #5700 » bug5700.patch
cont.c | ||
---|---|---|
return size;
|
||
}
|
||
VALUE
|
||
rb_obj_is_fiber(VALUE obj)
|
||
{
|
||
if (rb_typeddata_is_kind_of(obj, &fiber_data_type)) {
|
||
return Qtrue;
|
||
}
|
||
else {
|
||
return Qfalse;
|
||
}
|
||
}
|
||
static void
|
||
cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont)
|
||
{
|
||
... | ... | |
return rb_fiber_transfer(return_fiber(), argc, argv);
|
||
}
|
||
void
|
||
rb_fiber_reset_root_local_storage(VALUE thval)
|
||
{
|
||
rb_thread_t *th;
|
||
rb_fiber_t *fib;
|
||
GetThreadPtr(thval, th);
|
||
if (th->root_fiber && th->root_fiber != th->fiber) {
|
||
GetFiberPtr(th->root_fiber, fib);
|
||
th->local_storage = fib->cont.saved_thread.local_storage;
|
||
}
|
||
}
|
||
/*
|
||
* call-seq:
|
||
* fiber.alive? -> true or false
|
gc.c | ||
---|---|---|
while (p < pend) {
|
||
if (BUILTIN_TYPE(p) == T_DATA &&
|
||
DATA_PTR(p) && RANY(p)->as.data.dfree &&
|
||
!rb_obj_is_thread((VALUE)p) && !rb_obj_is_mutex((VALUE)p) ) {
|
||
!rb_obj_is_thread((VALUE)p) && !rb_obj_is_mutex((VALUE)p) &&
|
||
!rb_obj_is_fiber((VALUE)p)) {
|
||
p->as.free.flags = 0;
|
||
if (RTYPEDDATA_P(p)) {
|
||
RDATA(p)->dfree = RANY(p)->as.typeddata.type->function.dfree;
|
internal.h | ||
---|---|---|
int rb_parse_in_main(void);
|
||
VALUE rb_insns_name_array(void);
|
||
/* cont.c */
|
||
VALUE rb_obj_is_fiber(VALUE);
|
||
void rb_fiber_reset_root_local_storage(VALUE);
|
||
/* debug.c */
|
||
PRINTF_ARGS(void ruby_debug_printf(const char*, ...), 1, 2);
|
||
vm.c | ||
---|---|---|
rb_gc_force_recycle(vm->self);
|
||
vm->main_thread = 0;
|
||
if (th) {
|
||
rb_fiber_reset_root_local_storage(th->self);
|
||
thread_free(th);
|
||
}
|
||
if (vm->living_threads) {
|
- « Previous
- 1
- 2
- 3
- 4
- Next »