signal.c File Reference

#include "ruby/ruby.h"
#include "vm_core.h"
#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include "ruby_atomic.h"
#include "eval_intern.h"
#include "internal.h"

Go to the source code of this file.

Data Structures

struct  signals

Defines

#define VALGRIND_MAKE_MEM_DEFINED(p, n)   0
#define VALGRIND_MAKE_MEM_UNDEFINED(p, n)   0
#define killpg(pg, sig)   kill(-(pg), (sig))
#define sighandler_t   ruby_sighandler_t
#define SIGINFO_ARG
#define ruby_signal(sig, handler)   (/* rb_trap_accept_nativethreads[(sig)] = 0,*/ signal((sig),(handler)))
#define CHECK_STACK_OVERFLOW()   (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 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, 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 void install_sighandler (int signum, sighandler_t handler)
void ruby_sig_finalize (void)
void Init_signal (void)

Variables

static struct signals siglist []
struct {
   rb_atomic_t   cnt [RUBY_NSIG]
   rb_atomic_t   size
signal_buff
int ruby_enable_coredump = 0


Define Documentation

 
#define CHECK_STACK_OVERFLOW (  )     (void)0

Definition at line 757 of file signal.c.

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

Referenced by rb_f_kill().

#define ruby_enable_coredump   0

Definition at line 1245 of file signal.c.

Referenced by set_debug_option().

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

Definition at line 605 of file signal.c.

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

#define sighandler_t   ruby_sighandler_t

Definition at line 503 of file signal.c.

Referenced by default_handler(), Init_signal(), install_sighandler(), ruby_sig_finalize(), sig_trap(), signal_ignored(), trap(), and trap_handler().

#define SIGINFO_ARG

Definition at line 512 of file signal.c.

#define VALGRIND_MAKE_MEM_DEFINED ( p,
 )     0

Definition at line 35 of file signal.c.

#define VALGRIND_MAKE_MEM_UNDEFINED ( p,
 )     0

Definition at line 36 of file signal.c.


Typedef Documentation

typedef RETSIGTYPE ruby_sigaction_t(int)

Definition at line 511 of file signal.c.

typedef RETSIGTYPE(*) sighandler_t(int)

Definition at line 506 of file signal.c.


Function Documentation

static sighandler_t default_handler ( int  sig  )  [static]

Definition at line 903 of file signal.c.

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

Referenced by trap_handler().

static VALUE esignal_init ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 269 of file signal.c.

References INT2NUM, NIL_P, NSIG, NUM2INT, Qnil, rb_call_super(), rb_check_arity, rb_check_to_integer(), rb_eArgError, rb_id2name(), rb_iv_set(), rb_raise(), rb_sprintf(), signals::signm, signm2signo(), signals::signo, signo2signm(), StringValuePtr, SYM2ID, SYMBOL_P, and VALUE.

Referenced by Init_signal().

static VALUE esignal_signo ( VALUE  self  )  [static]

Definition at line 323 of file signal.c.

References rb_iv_get().

Referenced by Init_signal().

void Init_signal ( void   ) 

Definition at line 1286 of file signal.c.

References esignal_init(), esignal_signo(), GET_THREAD(), install_sighandler(), interrupt_init(), rb_alias(), rb_define_global_function(), rb_define_method(), rb_define_module(), rb_define_module_function(), rb_eInterrupt, rb_eSignal, rb_intern, sig_list(), sig_signame(), sig_trap(), sighandler(), sighandler_t, SIGINT, and VALUE.

static void install_sighandler ( int  signum,
sighandler_t  handler 
) [static]

Definition at line 1200 of file signal.c.

References rb_disable_interrupt(), rb_enable_interrupt(), ruby_signal, and sighandler_t.

Referenced by Init_signal().

static VALUE interrupt_init ( int  argc,
VALUE *  argv,
VALUE  self 
) [static]

Definition at line 330 of file signal.c.

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

Referenced by Init_signal().

static void rb_disable_interrupt ( void   )  [static]

Definition at line 665 of file signal.c.

References NULL, and pthread_sigmask().

Referenced by install_sighandler().

static void rb_enable_interrupt ( void   )  [static]

Definition at line 675 of file signal.c.

References NULL, and pthread_sigmask().

Referenced by install_sighandler().

VALUE rb_f_kill ( int  argc,
VALUE *  argv 
)

Definition at line 385 of file signal.c.

References FIX2INT, GET_THREAD(), GET_VM, INT2FIX, kill(), killpg, NIL_P, NUM2PIDT, rb_check_arity, rb_check_string_type(), rb_eArgError, rb_id2name(), rb_obj_classname(), rb_pid_t, rb_raise(), rb_secure(), rb_sys_fail(), rb_thread_current(), rb_thread_execute_interrupts(), rb_threadptr_check_signal(), RSTRING_PTR, ruby_kill(), SIGKILL, signal_enque(), signal_ignored(), signm2signo(), SYM2ID, T_FIXNUM, T_STRING, T_SYMBOL, TYPE, UNLIMITED_ARGUMENTS, and VALUE.

Referenced by Init_process().

int rb_get_next_signal ( void   ) 

Definition at line 685 of file signal.c.

References ATOMIC_DEC, RUBY_NSIG, and signal_buff.

Referenced by rb_threadptr_execute_interrupts().

int rb_signal_buff_size ( void   ) 

Definition at line 655 of file signal.c.

References signal_buff.

Referenced by rb_thread_check_trap_pending(), and rb_threadptr_check_signal().

void rb_signal_exec ( rb_thread_t th,
int  sig 
)

Definition at line 861 of file signal.c.

References rb_vm_struct::cmd, GET_VM, Qundef, rb_interrupt(), rb_threadptr_signal_exit(), rb_threadptr_signal_raise(), rb_vm_struct::safe, SIGINT, signal_exec(), rb_vm_struct::trap_list, and VALUE.

Referenced by rb_threadptr_execute_interrupts().

void rb_trap_exit ( void   ) 

Definition at line 849 of file signal.c.

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

Referenced by ruby_finalize_0().

static int reserved_signal_p ( int  signo  )  [static]

Definition at line 1083 of file signal.c.

Referenced by sig_trap().

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

Definition at line 53 of file signal.c.

rb_atomic_t ruby_atomic_exchange ( rb_atomic_t ptr,
rb_atomic_t  val 
)

Definition at line 45 of file signal.c.

void ruby_default_signal ( int  sig  ) 

Definition at line 340 of file signal.c.

References signal().

Referenced by ruby_cleanup().

const char* ruby_signal_name ( int  no  ) 

Definition at line 254 of file signal.c.

References signo2signm().

Referenced by pst_message().

static VALUE sig_list ( void   )  [static]

Definition at line 1188 of file signal.c.

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

Referenced by Init_signal().

static VALUE sig_signame ( VALUE  recv,
VALUE  signo 
) [static]

Definition at line 247 of file signal.c.

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

Referenced by Init_signal().

static VALUE sig_trap ( int  argc,
VALUE *  argv 
) [static]

Definition at line 1144 of file signal.c.

References func, name, OBJ_TAINTED, rb_block_proc(), rb_check_arity, rb_eArgError, rb_eSecurityError, rb_raise(), rb_secure(), reserved_signal_p(), sighandler(), sighandler_t, signo2signm(), trap(), trap_handler(), trap_signm(), and VALUE.

Referenced by Init_signal().

static RETSIGTYPE sighandler ( int  sig  )  [static]

Definition at line 645 of file signal.c.

References rb_thread_wakeup_timer_thread(), ruby_signal, and signal_enque().

Referenced by default_handler(), Init_signal(), ruby_sig_finalize(), sig_trap(), signal_ignored(), trap(), and trap_handler().

static void signal_enque ( int  sig  )  [static]

Definition at line 638 of file signal.c.

References ATOMIC_INC, and signal_buff.

Referenced by rb_f_kill(), and sighandler().

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

Definition at line 817 of file signal.c.

References EXEC_TAG, GET_THREAD(), IMMEDIATE_P, INT2NUM, rb_thread_struct::interrupt_mask, JUMP_TAG, rb_ary_new3, rb_eval_cmd(), TH_POP_TAG, TH_PUSH_TAG, TRAP_INTERRUPT_MASK, and VALUE.

Referenced by rb_signal_exec(), and rb_trap_exit().

static int signal_ignored ( int  sig  )  [static]

Definition at line 620 of file signal.c.

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

Referenced by rb_f_kill().

static int signm2signo ( const char *  nm  )  [static]

Definition at line 212 of file signal.c.

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

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

static const char* signo2signm ( int  no  )  [static]

Definition at line 223 of file signal.c.

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

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

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

Definition at line 1049 of file signal.c.

References rb_vm_struct::cmd, GET_VM, Qnil, Qtrue, Qundef, rb_safe_level, rb_str_new2, ruby_signal, rb_vm_struct::safe, sighandler(), sighandler_t, rb_vm_struct::trap_list, and VALUE.

Referenced by sig_trap().

static sighandler_t trap_handler ( VALUE *  cmd,
int  sig 
) [static]

Definition at line 952 of file signal.c.

References default_handler(), func, GetProcPtr, NIL_P, Qtrue, Qundef, rb_check_string_type(), rb_eArgError, rb_id2str(), rb_raise(), RSTRING_LEN, RSTRING_PTR, SafeStringValue, sighandler(), sighandler_t, SYM2ID, SYMBOL_P, and VALUE.

Referenced by sig_trap().

static int trap_signm ( VALUE  vsig  )  [static]

Definition at line 1017 of file signal.c.

References FIX2INT, NSIG, rb_eArgError, rb_id2name(), rb_raise(), signm2signo(), StringValuePtr, SYM2ID, T_FIXNUM, T_SYMBOL, and TYPE.

Referenced by sig_trap().


Variable Documentation

rb_atomic_t cnt[RUBY_NSIG]

Definition at line 496 of file signal.c.

Referenced by compile_dregx(), compile_dstr(), compile_dstr_fragments(), descending_factorial(), ip_init(), local_tbl_gen(), rb_ary_rotate_m(), rb_env_size(), rb_gc_unprotect_logging(), rb_parser_calloc(), rb_parser_malloc(), rb_parser_realloc(), swallow(), and warn_unused_var().

int ruby_enable_coredump = 0

Definition at line 1243 of file signal.c.

struct signals siglist[] [static]

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

struct { ... } signal_buff [static]

Referenced by rb_get_next_signal(), rb_signal_buff_size(), and signal_enque().

rb_atomic_t size

Definition at line 497 of file signal.c.


Generated on 19 Jul 2016 for Ruby by  doxygen 1.4.7