Ruby
2.0.0p645(2015-04-13revision50299)
|
Go to the source code of this file.
Typedefs | |
typedef struct rb_vm_struct | ruby_vm_t |
Functions | |
int | ruby_vm_destruct (ruby_vm_t *vm) |
void | ruby_vm_at_exit (void(*func)(ruby_vm_t *)) |
ruby_vm_at_exit registers a function func to be invoked when a VM passed away. More... | |
typedef struct rb_vm_struct ruby_vm_t |
ruby_vm_at_exit registers a function func to be invoked when a VM passed away.
Functions registered this way runs in reverse order of registration, just like END {} block does. The difference is its timing to be triggered. ruby_vm_at_exit functions runs when a VM passed away, while END {} blocks runs just before a VM is passing away.
You cannot register a function to another VM than where you are in. So where to register is intuitive, omitted. OTOH the argument func cannot know which VM it is in because at the time of invocation, the VM has already died and there is no execution context. The VM itself is passed as the first argument to it.
[in] | func | the function to register. |
Definition at line 272 of file vm.c.
References at_exit, func, GET_VM, and rb_ary_push().
Definition at line 1665 of file vm.c.
References rb_vm_struct::living_threads, rb_vm_struct::main_thread, rb_vm_struct::objspace, rb_fiber_reset_root_local_storage(), rb_gc_force_recycle(), rb_objspace_free(), rb_vm_gvl_destroy(), RUBY_FREE_ENTER, RUBY_FREE_LEAVE, ruby_vm_run_at_exit_hooks(), ruby_xfree(), rb_vm_struct::self, rb_thread_struct::self, st_free_table(), th, and thread_free().
Referenced by ruby_cleanup().