Ruby  3.1.0dev(2021-09-10revisionb76ad15ed0da636161de0243c547ee1e6fc95681)
Data Structures | Macros | Typedefs | Enumerations | Functions
cont.c File Reference

(b76ad15ed0da636161de0243c547ee1e6fc95681)

#include "ruby/internal/config.h"
#include <unistd.h>
#include <sys/mman.h>
#include <COROUTINE_H>
#include "eval_intern.h"
#include "gc.h"
#include "internal.h"
#include "internal/cont.h"
#include "internal/proc.h"
#include "internal/warnings.h"
#include "ruby/fiber/scheduler.h"
#include "mjit.h"
#include "vm_core.h"
#include "id_table.h"
#include "ractor_core.h"
Include dependency graph for cont.c:

Go to the source code of this file.

Data Structures

struct  cont_saved_vm_stack
 
struct  fiber_pool_stack
 
struct  fiber_pool_vacancy
 
struct  fiber_pool_allocation
 
struct  fiber_pool
 
struct  rb_context_struct
 
struct  rb_fiber_struct
 

Macros

#define RB_PAGE_SIZE   (pagesize)
 
#define RB_PAGE_MASK   (~(RB_PAGE_SIZE - 1))
 
#define CAPTURE_JUST_VALID_VM_STACK   1
 
#define FIBER_POOL_INITIAL_SIZE   32
 
#define FIBER_POOL_ALLOCATION_MAXIMUM_SIZE   1024
 
#define FIBER_CREATED_P(fiber)   ((fiber)->status == FIBER_CREATED)
 
#define FIBER_RESUMED_P(fiber)   ((fiber)->status == FIBER_RESUMED)
 
#define FIBER_SUSPENDED_P(fiber)   ((fiber)->status == FIBER_SUSPENDED)
 
#define FIBER_TERMINATED_P(fiber)   ((fiber)->status == FIBER_TERMINATED)
 
#define FIBER_RUNNABLE_P(fiber)   (FIBER_CREATED_P(fiber) || FIBER_SUSPENDED_P(fiber))
 
#define FIBER_STACK_FLAGS   (MAP_PRIVATE | MAP_ANON)
 
#define ERRNOMSG   strerror(errno)
 
#define THREAD_MUST_BE_RUNNING(th)
 
#define STACK_PAD_SIZE   1024
 

Typedefs

typedef struct rb_context_struct rb_context_t
 
typedef VALUE e_proc(VALUE)
 

Enumerations

enum  context_type { CONTINUATION_CONTEXT = 0, FIBER_CONTEXT = 1 }
 
enum  fiber_status { FIBER_CREATED, FIBER_RESUMED, FIBER_SUSPENDED, FIBER_TERMINATED }
 

Functions

 NOINLINE (static VALUE cont_capture(volatile int *volatile stat))
 
rb_thread_trb_fiber_threadptr (const rb_fiber_t *fiber)
 
void rb_fiber_update_self (rb_fiber_t *fiber)
 
void rb_fiber_mark_self (const rb_fiber_t *fiber)
 
VALUE rb_obj_is_fiber (VALUE obj)
 
VALUE rb_fiberptr_self (struct rb_fiber_struct *fiber)
 
unsigned int rb_fiberptr_blocking (struct rb_fiber_struct *fiber)
 
void rb_fiber_init_mjit_cont (struct rb_fiber_struct *fiber)
 
 NOINLINE (static void fiber_setcontext(rb_fiber_t *new_fiber, rb_fiber_t *old_fiber))
 
 NOINLINE (NORETURN(static void cont_restore_1(rb_context_t *)))
 
 NORETURN (NOINLINE(static void cont_restore_0(rb_context_t *, VALUE *)))
 
void ruby_register_rollback_func_for_ensure (e_proc *ensure_func, e_proc *rollback_func)
 
 NORETURN (static VALUE rb_cont_call(int argc, VALUE *argv, VALUE contval))
 
VALUE rb_fiber_new (rb_block_call_func_t func, VALUE obj)
 
void rb_fiber_start (rb_fiber_t *fiber)
 
void rb_threadptr_root_fiber_setup (rb_thread_t *th)
 
void rb_threadptr_root_fiber_release (rb_thread_t *th)
 
void rb_threadptr_root_fiber_terminate (rb_thread_t *th)
 
VALUE rb_fiber_current (void)
 
VALUE rb_fiber_transfer (VALUE fiber_value, int argc, const VALUE *argv)
 
VALUE rb_fiber_blocking_p (VALUE fiber)
 
void rb_fiber_close (rb_fiber_t *fiber)
 
VALUE rb_fiber_resume_kw (VALUE fiber_value, int argc, const VALUE *argv, int kw_splat)
 
VALUE rb_fiber_resume (VALUE fiber_value, int argc, const VALUE *argv)
 
VALUE rb_fiber_yield_kw (int argc, const VALUE *argv, int kw_splat)
 
VALUE rb_fiber_yield (int argc, const VALUE *argv)
 
void rb_fiber_reset_root_local_storage (rb_thread_t *th)
 
VALUE rb_fiber_alive_p (VALUE fiber_value)
 
VALUE rb_fiber_transfer_kw (VALUE fiber_value, int argc, const VALUE *argv, int kw_splat)
 
void Init_Cont (void)
 
void ruby_Init_Continuation_body (void)
 

Macro Definition Documentation

◆ CAPTURE_JUST_VALID_VM_STACK

#define CAPTURE_JUST_VALID_VM_STACK   1

Definition at line 47 of file cont.c.

◆ ERRNOMSG

#define ERRNOMSG   strerror(errno)

Definition at line 264 of file cont.c.

◆ FIBER_CREATED_P

#define FIBER_CREATED_P (   fiber)    ((fiber)->status == FIBER_CREATED)

Definition at line 228 of file cont.c.

◆ FIBER_POOL_ALLOCATION_MAXIMUM_SIZE

#define FIBER_POOL_ALLOCATION_MAXIMUM_SIZE   1024

Definition at line 56 of file cont.c.

◆ FIBER_POOL_INITIAL_SIZE

#define FIBER_POOL_INITIAL_SIZE   32

Definition at line 55 of file cont.c.

◆ FIBER_RESUMED_P

#define FIBER_RESUMED_P (   fiber)    ((fiber)->status == FIBER_RESUMED)

Definition at line 229 of file cont.c.

◆ FIBER_RUNNABLE_P

#define FIBER_RUNNABLE_P (   fiber)    (FIBER_CREATED_P(fiber) || FIBER_SUSPENDED_P(fiber))

Definition at line 232 of file cont.c.

◆ FIBER_STACK_FLAGS

#define FIBER_STACK_FLAGS   (MAP_PRIVATE | MAP_ANON)

Definition at line 261 of file cont.c.

◆ FIBER_SUSPENDED_P

#define FIBER_SUSPENDED_P (   fiber)    ((fiber)->status == FIBER_SUSPENDED)

Definition at line 230 of file cont.c.

◆ FIBER_TERMINATED_P

#define FIBER_TERMINATED_P (   fiber)    ((fiber)->status == FIBER_TERMINATED)

Definition at line 231 of file cont.c.

◆ RB_PAGE_MASK

#define RB_PAGE_MASK   (~(RB_PAGE_SIZE - 1))

Definition at line 36 of file cont.c.

◆ RB_PAGE_SIZE

#define RB_PAGE_SIZE   (pagesize)

Definition at line 35 of file cont.c.

◆ STACK_PAD_SIZE

#define STACK_PAD_SIZE   1024

◆ THREAD_MUST_BE_RUNNING

#define THREAD_MUST_BE_RUNNING (   th)
Value:
do { \
if (!(th)->ec->tag) rb_raise(rb_eThreadError, "not running thread"); \
} while (0)

Definition at line 871 of file cont.c.

Typedef Documentation

◆ e_proc

typedef VALUE e_proc(VALUE)

Definition at line 1575 of file cont.c.

◆ rb_context_t

Enumeration Type Documentation

◆ context_type

Enumerator
CONTINUATION_CONTEXT 
FIBER_CONTEXT 

Definition at line 59 of file cont.c.

◆ fiber_status

Enumerator
FIBER_CREATED 
FIBER_RESUMED 
FIBER_SUSPENDED 
FIBER_TERMINATED 

Definition at line 221 of file cont.c.

Function Documentation

◆ Init_Cont()

void Init_Cont ( void  )

◆ NOINLINE() [1/3]

NOINLINE ( NORETURN(static void cont_restore_1(rb_context_t *))  )

◆ NOINLINE() [2/3]

NOINLINE ( static VALUE   cont_capturevolatile int *volatile stat)

◆ NOINLINE() [3/3]

NOINLINE ( static void   fiber_setcontextrb_fiber_t *new_fiber, rb_fiber_t *old_fiber)

◆ NORETURN() [1/2]

NORETURN ( NOINLINE(static void cont_restore_0(rb_context_t *, VALUE *))  )

◆ NORETURN() [2/2]

NORETURN ( static VALUE   rb_cont_callint argc, VALUE *argv, VALUE contval)

◆ rb_fiber_alive_p()

VALUE rb_fiber_alive_p ( VALUE  fiber_value)

Definition at line 2473 of file cont.c.

References FIBER_TERMINATED_P.

◆ rb_fiber_blocking_p()

VALUE rb_fiber_blocking_p ( VALUE  fiber)

Definition at line 2345 of file cont.c.

References RBOOL.

◆ rb_fiber_close()

void rb_fiber_close ( rb_fiber_t fiber)

Definition at line 2381 of file cont.c.

◆ rb_fiber_current()

VALUE rb_fiber_current ( void  )

Definition at line 2201 of file cont.c.

◆ rb_fiber_init_mjit_cont()

void rb_fiber_init_mjit_cont ( struct rb_fiber_struct fiber)

Definition at line 1186 of file cont.c.

◆ rb_fiber_mark_self()

void rb_fiber_mark_self ( const rb_fiber_t fiber)

◆ rb_fiber_new()

VALUE rb_fiber_new ( rb_block_call_func_t  func,
VALUE  obj 
)

Definition at line 1914 of file cont.c.

◆ rb_fiber_reset_root_local_storage()

void rb_fiber_reset_root_local_storage ( rb_thread_t th)

◆ rb_fiber_resume()

VALUE rb_fiber_resume ( VALUE  fiber_value,
int  argc,
const VALUE argv 
)

Definition at line 2439 of file cont.c.

References argc, argv, rb_fiber_resume_kw(), and RB_NO_KEYWORDS.

◆ rb_fiber_resume_kw()

VALUE rb_fiber_resume_kw ( VALUE  fiber_value,
int  argc,
const VALUE argv,
int  kw_splat 
)

Definition at line 2408 of file cont.c.

Referenced by rb_fiber_resume().

◆ rb_fiber_start()

void rb_fiber_start ( rb_fiber_t fiber)

◆ rb_fiber_threadptr()

rb_thread_t* rb_fiber_threadptr ( const rb_fiber_t fiber)

◆ rb_fiber_transfer()

VALUE rb_fiber_transfer ( VALUE  fiber_value,
int  argc,
const VALUE argv 
)

Definition at line 2325 of file cont.c.

◆ rb_fiber_transfer_kw()

VALUE rb_fiber_transfer_kw ( VALUE  fiber_value,
int  argc,
const VALUE argv,
int  kw_splat 
)

Definition at line 2702 of file cont.c.

◆ rb_fiber_update_self()

void rb_fiber_update_self ( rb_fiber_t fiber)

◆ rb_fiber_yield()

VALUE rb_fiber_yield ( int  argc,
const VALUE argv 
)

Definition at line 2451 of file cont.c.

◆ rb_fiber_yield_kw()

VALUE rb_fiber_yield_kw ( int  argc,
const VALUE argv,
int  kw_splat 
)

Definition at line 2445 of file cont.c.

◆ rb_fiberptr_blocking()

unsigned int rb_fiberptr_blocking ( struct rb_fiber_struct fiber)

Definition at line 1179 of file cont.c.

References rb_fiber_struct::blocking.

◆ rb_fiberptr_self()

VALUE rb_fiberptr_self ( struct rb_fiber_struct fiber)

Definition at line 1173 of file cont.c.

References rb_fiber_struct::cont, and rb_context_struct::self.

◆ rb_obj_is_fiber()

VALUE rb_obj_is_fiber ( VALUE  obj)

Definition at line 1084 of file cont.c.

References rb_typeddata_is_kind_of(), and RBOOL.

◆ rb_threadptr_root_fiber_release()

void rb_threadptr_root_fiber_release ( rb_thread_t th)

◆ rb_threadptr_root_fiber_setup()

void rb_threadptr_root_fiber_setup ( rb_thread_t th)

◆ rb_threadptr_root_fiber_terminate()

void rb_threadptr_root_fiber_terminate ( rb_thread_t th)

◆ ruby_Init_Continuation_body()

void ruby_Init_Continuation_body ( void  )

Definition at line 3122 of file cont.c.

Referenced by Init_continuation().

◆ ruby_register_rollback_func_for_ensure()

void ruby_register_rollback_func_for_ensure ( e_proc ensure_func,
e_proc rollback_func 
)

Definition at line 1580 of file cont.c.

References GET_VM, NULL, st_init_numtable(), st_insert(), and UNLIKELY.

rb_raise
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:3022
rb_eThreadError
VALUE rb_eThreadError
Definition: eval.c:957