Diff for /gforth/engine/signals.c between versions 1.44 and 1.50

version 1.44, 2012/03/23 19:32:25 version 1.50, 2012/03/26 16:34:35
Line 101  graceful_exit (int sig) Line 101  graceful_exit (int sig)
   exit (0x80|sig);    exit (0x80|sig);
 }  }
   
 __thread jmp_buf throw_jmp_buf;  PER_THREAD jmp_buf * throw_jmp_handler;
   
 void throw(int code)  void throw(int code)
 {  {
   debugp(stderr,"\nthrow code %d\n", code);    debugp(stderr,"\nthrow code %d to %p\n", code, *throw_jmp_handler);
   longjmp(throw_jmp_buf,code); /* !! or use siglongjmp ? */    longjmp(*throw_jmp_handler,code); /* !! or use siglongjmp ? */
 }  }
   
 static void   static void 
Line 142  signal_throw(int sig) Line 142  signal_throw(int sig)
 static void  static void
 sigaction_throw(int sig, siginfo_t *info, void *_)  sigaction_throw(int sig, siginfo_t *info, void *_)
 {  {
   debugp(stderr,"\nsigaction_throw %d %x %x\n", sig, info, _);    debugp(stderr,"\nsigaction_throw %d %p %p\n", sig, info, _);
   signal_throw(sig);    signal_throw(sig);
 }  }
   
Line 199  static void segv_handler(int sig, siginf Line 199  static void segv_handler(int sig, siginf
   Address addr=info->si_addr;    Address addr=info->si_addr;
   ImageHeader *h=gforth_header;    ImageHeader *h=gforth_header;
   
   debugp(stderr,"\nsegv_handler %d %x %x\n", sig, info, _);    debugp(stderr,"\nsegv_handler %d %p %p\n", sig, info, _);
   
   if (JUSTUNDER(addr, h->data_stack_base))    if (JUSTUNDER(addr, h->data_stack_base))
     code=-3;      code=-3;
Line 416  void install_signal_handlers(void) Line 416  void install_signal_handlers(void)
   };    };
   int i;    int i;
   void (*throw_handler)() = die_on_signal ? graceful_exit : signal_throw;    void (*throw_handler)() = die_on_signal ? graceful_exit : signal_throw;
 #ifdef SIGSTKSZ   #if defined(SIGSTKSZ)
   stack_t sigstack;    stack_t sigstack;
   int sas_retval=-1;    int sas_retval=-1;
   

Removed from v.1.44  
changed lines
  Added in v.1.50


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>