Ruby  2.4.2p198(2017-09-14revision59899)
Data Structures | Macros | Typedefs | Functions | Variables
signal.c File Reference
#include "internal.h"
#include "vm_core.h"
#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include "ruby_atomic.h"
#include "eval_intern.h"
Include dependency graph for signal.c:

Go to the source code of this file.

Data Structures

struct  signals
 

Macros

#define VALGRIND_MAKE_MEM_DEFINED(p, n)   0
 
#define VALGRIND_MAKE_MEM_UNDEFINED(p, n)   0
 
#define id_signo   ruby_static_id_signo
 
#define killpg(pg, sig)   kill(-(pg), (sig))
 
#define sighandler_t   ruby_sighandler_t
 
#define SIGINFO_ARG
 
#define SIGINFO_CTX   0
 
#define ruby_signal(sig, handler)   (/* rb_trap_accept_nativethreads[(sig)] = 0,*/ signal((sig),(handler)))
 
#define clear_received_signal()   ((void)0)
 
#define CHECK_STACK_OVERFLOW()   (void)0
 
#define MESSAGE_FAULT_ADDRESS
 
#define install_sighandler(signum, handler)   (install_sighandler(signum, handler) ? rb_bug(#signum) : (void)0)
 
#define ruby_enable_coredump   0
 

Typedefs

typedef RETSIGTYPE(* sighandler_t) (int)
 
typedef RETSIGTYPE ruby_sigaction_t(int)
 

Functions

rb_atomic_t ruby_atomic_exchange (rb_atomic_t *ptr, rb_atomic_t val)
 
rb_atomic_t ruby_atomic_compare_and_swap (rb_atomic_t *ptr, rb_atomic_t cmp, rb_atomic_t newval)
 
static int signm2signo (const char *nm)
 
static const char * signo2signm (int no)
 
static VALUE sig_signame (VALUE recv, VALUE signo)
 
const char * ruby_signal_name (int no)
 
static VALUE rb_signo2signm (int signo)
 
static VALUE esignal_init (int argc, VALUE *argv, VALUE self)
 
static VALUE esignal_signo (VALUE self)
 
static VALUE interrupt_init (int argc, VALUE *argv, VALUE self)
 
void ruby_default_signal (int sig)
 
static RETSIGTYPE sighandler (int sig)
 
static int signal_ignored (int sig)
 
static void signal_enque (int sig)
 
VALUE rb_f_kill (int argc, const VALUE *argv)
 
int rb_signal_buff_size (void)
 
static void rb_disable_interrupt (void)
 
static void rb_enable_interrupt (void)
 
int rb_get_next_signal (void)
 
static void signal_exec (VALUE cmd, int safe, int sig)
 
void rb_trap_exit (void)
 
void rb_signal_exec (rb_thread_t *th, int sig)
 
static sighandler_t default_handler (int sig)
 
static sighandler_t trap_handler (VALUE *cmd, int sig)
 
static int trap_signm (VALUE vsig)
 
static VALUE trap (int sig, sighandler_t func, VALUE command)
 
static int reserved_signal_p (int signo)
 
static VALUE sig_trap (int argc, VALUE *argv)
 
static VALUE sig_list (void)
 
static int install_sighandler (int signum, sighandler_t handler)
 
void ruby_sig_finalize (void)
 
void Init_signal (void)
 

Variables

ID ruby_static_id_signo
 
static const struct signals siglist []
 
static const char signame_prefix [3] = "SIG"
 
struct {
   rb_atomic_t   cnt [RUBY_NSIG]
 
   rb_atomic_t   size
 
signal_buff
 
int ruby_enable_coredump = 0
 

Macro Definition Documentation

◆ CHECK_STACK_OVERFLOW

#define CHECK_STACK_OVERFLOW ( )    (void)0

Definition at line 857 of file signal.c.

◆ clear_received_signal

#define clear_received_signal ( )    ((void)0)

Definition at line 760 of file signal.c.

◆ id_signo

#define id_signo   ruby_static_id_signo

Definition at line 49 of file signal.c.

Referenced by esignal_init(), and esignal_signo().

◆ install_sighandler

#define install_sighandler (   signum,
  handler 
)    (install_sighandler(signum, handler) ? rb_bug(#signum) : (void)0)

Definition at line 1380 of file signal.c.

Referenced by Init_signal().

◆ killpg

#define killpg (   pg,
  sig 
)    kill(-(pg), (sig))

Referenced by rb_f_kill().

◆ MESSAGE_FAULT_ADDRESS

#define MESSAGE_FAULT_ADDRESS

Definition at line 860 of file signal.c.

◆ ruby_enable_coredump

#define ruby_enable_coredump   0

Definition at line 1418 of file signal.c.

Referenced by set_debug_option().

◆ ruby_signal

#define ruby_signal (   sig,
  handler 
)    (/* rb_trap_accept_nativethreads[(sig)] = 0,*/ signal((sig),(handler)))

Definition at line 655 of file signal.c.

Referenced by install_sighandler(), ruby_sig_finalize(), sighandler(), and trap().

◆ sighandler_t

#define sighandler_t   ruby_sighandler_t

◆ SIGINFO_ARG

#define SIGINFO_ARG

Definition at line 542 of file signal.c.

◆ SIGINFO_CTX

#define SIGINFO_CTX   0

Definition at line 543 of file signal.c.

◆ VALGRIND_MAKE_MEM_DEFINED

#define VALGRIND_MAKE_MEM_DEFINED (   p,
 
)    0

Definition at line 40 of file signal.c.

Referenced by signal_ignored().

◆ VALGRIND_MAKE_MEM_UNDEFINED

#define VALGRIND_MAKE_MEM_UNDEFINED (   p,
 
)    0

Definition at line 41 of file signal.c.

Typedef Documentation

◆ ruby_sigaction_t

typedef RETSIGTYPE ruby_sigaction_t(int)

Definition at line 541 of file signal.c.

◆ sighandler_t

typedef RETSIGTYPE(* sighandler_t) (int)

Definition at line 535 of file signal.c.

Function Documentation

◆ default_handler()

static sighandler_t default_handler ( int  sig)
static

Definition at line 1053 of file signal.c.

References func, sighandler(), sighandler_t, and SIGINT.

Referenced by trap_handler().

◆ esignal_init()

static VALUE esignal_init ( int  argc,
VALUE argv,
VALUE  self 
)
static

◆ esignal_signo()

static VALUE esignal_signo ( VALUE  self)
static

Definition at line 343 of file signal.c.

References id_signo, and rb_ivar_get().

Referenced by Init_signal().

◆ Init_signal()

void Init_signal ( void  )

◆ install_sighandler()

static int install_sighandler ( int  signum,
sighandler_t  handler 
)
static

Definition at line 1367 of file signal.c.

References ruby_signal, and sighandler_t.

◆ interrupt_init()

static VALUE interrupt_init ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 350 of file signal.c.

References INT2FIX, rb_call_super(), rb_scan_args(), and SIGINT.

Referenced by Init_signal().

◆ rb_disable_interrupt()

static void rb_disable_interrupt ( void  )
static

Definition at line 719 of file signal.c.

References NULL.

Referenced by Init_signal().

◆ rb_enable_interrupt()

static void rb_enable_interrupt ( void  )
static

Definition at line 729 of file signal.c.

References NULL.

Referenced by Init_signal().

◆ rb_f_kill()

VALUE rb_f_kill ( int  argc,
const VALUE argv 
)

◆ rb_get_next_signal()

int rb_get_next_signal ( void  )

Definition at line 739 of file signal.c.

References ATOMIC_DEC, RUBY_NSIG, and signal_buff.

Referenced by rb_threadptr_execute_interrupts().

◆ rb_signal_buff_size()

int rb_signal_buff_size ( void  )

Definition at line 709 of file signal.c.

References signal_buff.

Referenced by rb_thread_check_trap_pending(), and rb_threadptr_check_signal().

◆ rb_signal_exec()

void rb_signal_exec ( rb_thread_t th,
int  sig 
)

◆ rb_signo2signm()

static VALUE rb_signo2signm ( int  signo)
static

Definition at line 268 of file signal.c.

References rb_sprintf(), signals::signm, and signo2signm().

Referenced by esignal_init(), and trap().

◆ rb_trap_exit()

void rb_trap_exit ( void  )

Definition at line 999 of file signal.c.

References rb_vm_struct::cmd, GET_VM, rb_vm_struct::safe, signal_exec(), and rb_vm_struct::trap_list.

Referenced by ruby_finalize_0().

◆ reserved_signal_p()

static int reserved_signal_p ( int  signo)
static

Definition at line 1251 of file signal.c.

Referenced by sig_trap().

◆ ruby_atomic_compare_and_swap()

rb_atomic_t ruby_atomic_compare_and_swap ( rb_atomic_t ptr,
rb_atomic_t  cmp,
rb_atomic_t  newval 
)

Definition at line 61 of file signal.c.

◆ ruby_atomic_exchange()

rb_atomic_t ruby_atomic_exchange ( rb_atomic_t ptr,
rb_atomic_t  val 
)

Definition at line 53 of file signal.c.

References val.

◆ ruby_default_signal()

void ruby_default_signal ( int  sig)

Definition at line 360 of file signal.c.

References sighandler(), signal_enque(), and signal_ignored().

Referenced by ruby_cleanup().

◆ ruby_signal_name()

const char* ruby_signal_name ( int  no)

Definition at line 262 of file signal.c.

References signo2signm().

Referenced by pst_message().

◆ sig_list()

static VALUE sig_list ( void  )
static

Definition at line 1355 of file signal.c.

References INT2FIX, rb_fstring_cstr(), rb_hash_aset(), rb_hash_new(), siglist, signals::signm, and signals::signo.

Referenced by Init_signal().

◆ sig_signame()

static VALUE sig_signame ( VALUE  recv,
VALUE  signo 
)
static

Definition at line 254 of file signal.c.

References NUM2INT, Qnil, rb_str_new_cstr(), and signo2signm().

Referenced by Init_signal().

◆ sig_trap()

static VALUE sig_trap ( int  argc,
VALUE argv 
)
static

◆ sighandler()

static RETSIGTYPE sighandler ( int  sig)
static

◆ signal_enque()

static void signal_enque ( int  sig)
static

Definition at line 688 of file signal.c.

References ATOMIC_INC, and signal_buff.

Referenced by rb_f_kill(), ruby_default_signal(), and sighandler().

◆ signal_exec()

static void signal_exec ( VALUE  cmd,
int  safe,
int  sig 
)
static

◆ signal_ignored()

static int signal_ignored ( int  sig)
static

Definition at line 670 of file signal.c.

References FALSE, func, NULL, sighandler(), sighandler_t, and VALGRIND_MAKE_MEM_DEFINED.

Referenced by rb_f_kill(), and ruby_default_signal().

◆ signm2signo()

static int signm2signo ( const char *  nm)
static

Definition at line 218 of file signal.c.

References siglist, signals::signm, and signals::signo.

Referenced by esignal_init(), rb_f_kill(), and trap_signm().

◆ signo2signm()

static const char* signo2signm ( int  no)
static

Definition at line 229 of file signal.c.

References siglist, signals::signm, and signals::signo.

Referenced by rb_signo2signm(), ruby_signal_name(), sig_signame(), and sig_trap().

◆ trap()

static VALUE trap ( int  sig,
sighandler_t  func,
VALUE  command 
)
static

◆ trap_handler()

static sighandler_t trap_handler ( VALUE cmd,
int  sig 
)
static

◆ trap_signm()

static int trap_signm ( VALUE  vsig)
static

Variable Documentation

◆ cnt

◆ ruby_enable_coredump

int ruby_enable_coredump = 0

Definition at line 1416 of file signal.c.

◆ ruby_static_id_signo

ID ruby_static_id_signo

Definition at line 27 of file eval.c.

◆ siglist

const struct signals siglist[]
static

Referenced by sig_list(), signm2signo(), and signo2signm().

◆ signal_buff

struct { ... } signal_buff

◆ signame_prefix

const char signame_prefix[3] = "SIG"
static

Definition at line 215 of file signal.c.

Referenced by esignal_init(), rb_f_kill(), and trap_signm().

◆ size

Definition at line 526 of file signal.c.