All pastes #1064353 Raw Edit

signal handler

public text v1 · immutable
#1064353 ·published 2008-07-07 04:43 UTC
rendered paste body
Index: test/test.c
===================================================================
--- test/test.c	(revision 1557)
+++ test/test.c	(working copy)
@@ -186,6 +186,11 @@
     /* Exit ASAP on Ctrl-C */
     signal( SIGINT, SigHandler );
 
+    /* Catch crashes and exit gracefully, if possible. */
+    signal( SIGSEGV, SigHandler );
+    signal( SIGBUS,  SigHandler );
+    signal( SIGFPE,  SigHandler );
+
     /* Feed libhb with a DVD to scan */
     fprintf( stderr, "Opening %s...\n", input );
 
@@ -1397,12 +1402,17 @@
 static volatile int64_t i_die_date = 0;
 void SigHandler( int i_signal )
 {
+    if( i_signal != SIGINT )
+    {
+        hb_error( "HandBrake has crashed on signal %d..." i_signal );
+    }
+
     if( die == 0 )
     {
         die = 1;
         i_die_date = hb_get_date();
         fprintf( stderr, "Signal %d received, terminating - do it "
-                 "again in case it gets stuck\n", i_signal );
+                 "again if it gets stuck\n", i_signal );
     }
     else if( i_die_date + 500 < hb_get_date() )
     {
Index: macosx/main.mm
===================================================================
--- macosx/main.mm	(revision 1557)
+++ macosx/main.mm	(working copy)
@@ -9,6 +9,10 @@
 
 void SigHandler( int signal )
 {
+    if( i_signal != SIGINT )
+    {
+        hb_error( "HandBrake has crashed on signal %d..." i_signal );
+    }
     [NSApp terminate: NULL];
 } 
 
@@ -28,6 +32,10 @@
 int main( int argc, const char ** argv )
 {
     signal( SIGINT, SigHandler );
+    signal( SIGBUS, SigHandler );
+    signal( SIGSEGV, SigHandler );
+    signal( SIGFPE, SigHandler );
+    
     hb_register_error_handler(&hb_error_handler);
     return NSApplicationMain( argc, argv );
 }