Ruby: include/ruby/vm.h File Reference

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

Typedefs | Functions
vm.h File Reference
`#include "ruby/internal/dllexport.h"`

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...

## Detailed Description

Author
  $Author$

Date
  Sat May 31 15:17:36 2008

Copyright
  Copyright (C) 2008 Yukihiro Matsumoto
  This file is a part of the programming language Ruby. Permission is hereby granted, to either redistribute and/or modify this file, provided that the conditions mentioned in the file COPYING are met. Consult the file for details.

Definition in file vm.h.

## Typedef Documentation

## ◆ ruby_vm_t

typedef struct rb_vm_struct ruby_vm_t

Definition at line 24 of file vm.h.

## Function Documentation

## ◆ ruby_vm_at_exit()

void ruby_vm_at_exit | ( | void(*)(ruby_vm_t *) | func | ) |

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.

Parameters

  [in] | func | the function to register.

Definition at line 658 of file vm.c.

References ALLOC, rb_vm_struct::at_exit, rb_at_exit_list::func, and rb_at_exit_list::next.

## ◆ ruby_vm_destruct()

int ruby_vm_destruct | ( | ruby_vm_t * | vm | ) |

Definition at line 2639 of file vm.c.

References rb_vm_struct::frozen_strings, rb_vm_struct::loading_table, rb_vm_struct::main_thread, NULL, rb_vm_struct::objspace, rb_vm_struct::ractor, RB_ALTSTACK_FREE, rb_fiber_reset_root_local_storage(), rb_native_mutex_destroy(), rb_objspace_free(), ruby_current_vm_ptr, RUBY_FREE_ENTER, RUBY_FREE_LEAVE, ruby_mimfree(), st_foreach, st_free_table, rb_vm_struct::waitpid_lock, and rb_vm_struct::workqueue_lock.