mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* cont.c (fiber_free): don't free unallocated local_storage. see #1325.
* cont.c (cont_init): clear local_storage not to use current thread's. * cont.c (fiber_t_alloc, root_fiber_alloc): link itself always for a case that fiber_link_remove() is called before fiber_link_join(). * cont.c (fiber_init): clear cont->vm_stack and th->stack before root_fiber_alloc() in rb_fiber_current(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9c173cd588
commit
2c2fb9c5ec
2 changed files with 19 additions and 2 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
Mon Nov 2 18:33:21 2009 wanabe <s.wanabe@gmail.com>
|
||||
|
||||
* cont.c (fiber_free): don't free unallocated local_storage. see #1325.
|
||||
|
||||
* cont.c (cont_init): clear local_storage not to use current thread's.
|
||||
|
||||
* cont.c (fiber_t_alloc, root_fiber_alloc): link itself always for
|
||||
a case that fiber_link_remove() is called before fiber_link_join().
|
||||
|
||||
* cont.c (fiber_init): clear cont->vm_stack and th->stack before
|
||||
root_fiber_alloc() in rb_fiber_current().
|
||||
|
||||
Mon Nov 2 14:52:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_exc_raise, rb_exc_fatal, rb_make_exception):
|
||||
|
|
9
cont.c
9
cont.c
|
@ -198,7 +198,8 @@ fiber_free(void *ptr)
|
|||
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);
|
||||
|
@ -283,6 +284,7 @@ cont_init(rb_context_t *cont, rb_thread_t *th)
|
|||
{
|
||||
/* save thread context */
|
||||
cont->saved_thread = *th;
|
||||
cont->saved_thread.local_storage = 0;
|
||||
}
|
||||
|
||||
static rb_context_t *
|
||||
|
@ -744,12 +746,15 @@ fiber_init(VALUE fibval, VALUE proc)
|
|||
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 = 0;
|
||||
th->stack_size = 0;
|
||||
|
||||
fiber_link_join(fib);
|
||||
|
||||
th->stack_size = FIBER_VM_STACK_SIZE;
|
||||
th->stack = ALLOC_N(VALUE, th->stack_size);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue