diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-17 19:59:56 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-17 19:59:56 +0000 |
commit | cad4591086b285fa5c8fb61f19692b9a521dcea7 (patch) | |
tree | d5cced02e3e1a3e9a89ff0862f83ee5bdb35f658 /cont.c | |
parent | 3a55e8a4360fbcd1c8db05eba4d8e7e365dd4547 (diff) | |
download | ruby-cad4591086b285fa5c8fb61f19692b9a521dcea7.tar.gz |
remove branches in dmark and dfree GC callbacks
dmark and dfree callbacks are never called in gc.c for NULL
DATA_PTR values, not even for zombie objects.
* compile.c (ibf_loader_mark): remove branch for pointer validity
* compile.c (ibf_loader_free): ditto
* cont.c (cont_free): ditto
* cont.c (fiber_free): ditto
* dir.c (dir_free): ditto
* ext/stringio/stringio.c (strio_mark): ditto
* proc.c (binding_free): ditto
* thread_sync.c (mutex_free): ditto
* vm.c (thread_free): ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58006 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'cont.c')
-rw-r--r-- | cont.c | 85 |
1 files changed, 41 insertions, 44 deletions
@@ -218,55 +218,54 @@ cont_mark(void *ptr) static void cont_free(void *ptr) { + rb_context_t *cont = ptr; + RUBY_FREE_ENTER("cont"); - if (ptr) { - rb_context_t *cont = ptr; - RUBY_FREE_UNLESS_NULL(cont->saved_thread.stack); + RUBY_FREE_UNLESS_NULL(cont->saved_thread.stack); #if FIBER_USE_NATIVE - if (cont->type == CONTINUATION_CONTEXT) { - /* cont */ - ruby_xfree(cont->ensure_array); - RUBY_FREE_UNLESS_NULL(cont->machine.stack); - } - else { - /* fiber */ - rb_fiber_t *fib = (rb_fiber_t*)cont; - const rb_thread_t *const th = GET_THREAD(); + if (cont->type == CONTINUATION_CONTEXT) { + /* cont */ + ruby_xfree(cont->ensure_array); + RUBY_FREE_UNLESS_NULL(cont->machine.stack); + } + else { + /* fiber */ + rb_fiber_t *fib = (rb_fiber_t*)cont; + const rb_thread_t *const th = GET_THREAD(); #ifdef _WIN32 - if (th && th->fiber != fib && cont->type != ROOT_FIBER_CONTEXT) { - /* don't delete root fiber handle */ - if (fib->fib_handle) { - DeleteFiber(fib->fib_handle); - } + if (th && th->fiber != fib && cont->type != ROOT_FIBER_CONTEXT) { + /* don't delete root fiber handle */ + if (fib->fib_handle) { + DeleteFiber(fib->fib_handle); } + } #else /* not WIN32 */ - if (th && th->fiber != fib) { - if (fib->ss_sp) { - if (cont->type == ROOT_FIBER_CONTEXT) { - rb_bug("Illegal root fiber parameter"); - } - munmap((void*)fib->ss_sp, fib->ss_size); + if (th && th->fiber != fib) { + if (fib->ss_sp) { + if (cont->type == ROOT_FIBER_CONTEXT) { + rb_bug("Illegal root fiber parameter"); } + munmap((void*)fib->ss_sp, fib->ss_size); } - else { - /* It may reached here when finalize */ - /* TODO examine whether it is a bug */ - /* rb_bug("cont_free: release self"); */ - } -#endif } + else { + /* It may reached here when finalize */ + /* TODO examine whether it is a bug */ + /* rb_bug("cont_free: release self"); */ + } +#endif + } #else /* not FIBER_USE_NATIVE */ - ruby_xfree(cont->ensure_array); - RUBY_FREE_UNLESS_NULL(cont->machine.stack); + ruby_xfree(cont->ensure_array); + RUBY_FREE_UNLESS_NULL(cont->machine.stack); #endif #ifdef __ia64 - RUBY_FREE_UNLESS_NULL(cont->machine.register_stack); + RUBY_FREE_UNLESS_NULL(cont->machine.register_stack); #endif - RUBY_FREE_UNLESS_NULL(cont->vm_stack); + RUBY_FREE_UNLESS_NULL(cont->vm_stack); - /* free rb_cont_t or rb_fiber_t */ - ruby_xfree(ptr); - } + /* free rb_cont_t or rb_fiber_t */ + ruby_xfree(ptr); RUBY_FREE_LEAVE("cont"); } @@ -317,16 +316,14 @@ fiber_mark(void *ptr) static void fiber_free(void *ptr) { + rb_fiber_t *fib = ptr; RUBY_FREE_ENTER("fiber"); - if (ptr) { - rb_fiber_t *fib = ptr; - if (fib->cont.type != ROOT_FIBER_CONTEXT && - fib->cont.saved_thread.local_storage) { - st_free_table(fib->cont.saved_thread.local_storage); - } - - cont_free(&fib->cont); + if (fib->cont.type != ROOT_FIBER_CONTEXT && + fib->cont.saved_thread.local_storage) { + st_free_table(fib->cont.saved_thread.local_storage); } + + cont_free(&fib->cont); RUBY_FREE_LEAVE("fiber"); } |