Ruby  3.4.0dev (2024-11-22 revision 37a72b0150ec36b4ea27175039afc28c62207b0c)
Typedefs | Functions
vm.h File Reference

(37a72b0150ec36b4ea27175039afc28c62207b0c)

#include "ruby/internal/dllexport.h"
Include dependency graph for vm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef struct rb_vm_struct ruby_vm_t
 The opaque struct to hold VM internals. More...
 

Functions

int ruby_vm_destruct (ruby_vm_t *vm)
 Destructs the passed VM. More...
 
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...
 
bool ruby_free_at_exit_p (void)
 Returns whether the Ruby VM will free all memory at shutdown. More...
 

Detailed Description

Author
$Author$
Date
Sat May 31 15:17:36 2008

We planned to have multiple VMs run side-by-side. The API here was a preparation of that feature. The topic branch was eventually abandoned, and we now have Ractor. This file is kind of obsolescent.

Definition in file vm.h.

Typedef Documentation

◆ ruby_vm_t

typedef struct rb_vm_struct ruby_vm_t

The opaque struct to hold VM internals.

Its fields are intentionally hidden from extension libraries because it changes drastically time to time.

Definition at line 1 of file vm.h.

Function Documentation

◆ ruby_free_at_exit_p()

bool ruby_free_at_exit_p ( void  )

Returns whether the Ruby VM will free all memory at shutdown.

Returns
true if free-at-exit is enabled, false otherwise.

Definition at line 4502 of file vm.c.

◆ 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]functhe function to register.

Definition at line 877 of file vm.c.

◆ ruby_vm_destruct()

int ruby_vm_destruct ( ruby_vm_t vm)

Destructs the passed VM.

You don't have to call this API directly now, because there is no way to create one. There is only one VM at one time. ruby_stop() should just suffice.

Definition at line 3063 of file vm.c.