Bug #1325 » noalloc_fiber.patch
| cont.c (working copy) | ||
|---|---|---|
|
if (ptr) {
|
||
|
rb_fiber_t *fib = ptr;
|
||
|
if (fib->cont.type != ROOT_FIBER_CONTEXT) {
|
||
|
if (fib->cont.type != ROOT_FIBER_CONTEXT &&
|
||
|
fib->cont.saved_thread.local_storage) {
|
||
|
st_free_table(fib->cont.saved_thread.local_storage);
|
||
|
}
|
||
|
fiber_link_remove(fib);
|
||
| ... | ... | |
|
cont_init(&fib->cont, th);
|
||
|
fib->prev = Qnil;
|
||
|
fib->status = CREATED;
|
||
|
fib->prev_fiber = fib->next_fiber = fib;
|
||
|
DATA_PTR(fibval) = fib;
|
||
| ... | ... | |
|
rb_context_t *cont = &fib->cont;
|
||
|
rb_thread_t *th = &cont->saved_thread;
|
||
|
fiber_link_join(fib);
|
||
|
/* initialize cont */
|
||
|
cont->vm_stack = 0;
|
||
| ... | ... | |
|
th->stack_size = FIBER_VM_STACK_SIZE;
|
||
|
th->stack = ALLOC_N(VALUE, th->stack_size);
|
||
|
fiber_link_join(fib);
|
||
|
th->cfp = (void *)(th->stack + th->stack_size);
|
||
|
th->cfp--;
|
||
|
th->cfp->pc = 0;
|
||
- « Previous
- 1
- 2
- Next »