Changeset 8304
- Timestamp:
- 02/06/13 22:36:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oscam.c
r8293 r8304 652 652 653 653 /* Sets the signal handlers.*/ 654 static void init_signal( int8_t isDaemon)654 static void init_signal() 655 655 { 656 656 set_signal_handler(SIGINT, 3, cs_exit); 657 657 #if defined(__APPLE__) 658 set_signal_handler(SIGEMT, 3, cs_exit); 659 #endif 660 set_signal_handler(SIGTERM, 3, cs_exit); 661 662 set_signal_handler(SIGWINCH, 1, SIG_IGN); 663 set_signal_handler(SIGPIPE , 0, cs_sigpipe); 664 set_signal_handler(SIGALRM , 0, cs_master_alarm); 665 set_signal_handler(SIGHUP , 1, isDaemon?cs_dummy:cs_reload_config); 666 set_signal_handler(SIGUSR1, 1, isDaemon?cs_dummy:cs_debug_level); 667 set_signal_handler(SIGUSR2, 1, isDaemon?cs_dummy:cs_card_info); 668 set_signal_handler(OSCAM_SIGNAL_WAKEUP, 0, isDaemon?cs_dummy:cs_dummy); 669 670 if(!isDaemon){ 671 if (cs_capture_SEGV) { 672 set_signal_handler(SIGSEGV, 1, cs_exit); 673 set_signal_handler(SIGBUS, 1, cs_exit); 674 } 675 else if (cs_dump_stack) { 676 set_signal_handler(SIGSEGV, 1, cs_dumpstack); 677 set_signal_handler(SIGBUS, 1, cs_dumpstack); 678 } 679 680 cs_log("signal handling initialized"); 681 } 658 set_signal_handler(SIGEMT, 3, cs_exit); 659 #endif 660 set_signal_handler(SIGTERM, 3, cs_exit); 661 662 set_signal_handler(SIGWINCH, 1, SIG_IGN); 663 set_signal_handler(SIGPIPE , 0, cs_sigpipe); 664 set_signal_handler(SIGALRM , 0, cs_master_alarm); 665 set_signal_handler(SIGHUP , 1, cs_reload_config); 666 set_signal_handler(SIGUSR1, 1, cs_debug_level); 667 set_signal_handler(SIGUSR2, 1, cs_card_info); 668 set_signal_handler(OSCAM_SIGNAL_WAKEUP, 0, cs_dummy); 669 670 if (cs_capture_SEGV) { 671 set_signal_handler(SIGSEGV, 1, cs_exit); 672 set_signal_handler(SIGBUS, 1, cs_exit); 673 } 674 else if (cs_dump_stack) { 675 set_signal_handler(SIGSEGV, 1, cs_dumpstack); 676 set_signal_handler(SIGBUS, 1, cs_dumpstack); 677 } 678 679 cs_log("signal handling initialized"); 682 680 return; 683 681 } … … 685 683 void cs_exit(int32_t sig) 686 684 { 687 if (cs_dump_stack && (sig == SIGSEGV || sig == SIGBUS ))685 if (cs_dump_stack && (sig == SIGSEGV || sig == SIGBUS || sig == SIGQUIT)) 688 686 cs_dumpstack(sig); 689 687 690 set_signal_handler(SIGCHLD, 1, SIG_IGN);691 688 set_signal_handler(SIGHUP , 1, SIG_IGN); 692 689 set_signal_handler(SIGPIPE, 1, SIG_IGN); 693 694 if (sig==SIGALRM) {695 cs_debug_mask(D_TRACE, "thread %8lX: SIGALRM, skipping", (unsigned long)pthread_self());696 return;697 }698 699 if (sig && (sig!=SIGQUIT))700 cs_log("thread %8lX exit with signal %d", (unsigned long)pthread_self(), sig);701 690 702 691 struct s_client *cl = cur_client(); … … 704 693 return; 705 694 706 if (cl->typ == 'h' || cl->typ == 's') {707 led_status_stopping();708 led_stop();709 lcd_thread_stop();710 711 #if !defined(__CYGWIN__)712 char targetfile[256];713 snprintf(targetfile, 255, "%s%s", get_tmp_dir(), "/oscam.version");714 if (unlink(targetfile) < 0)715 cs_log("cannot remove oscam version file %s (errno=%d %s)", targetfile, errno, strerror(errno));716 #endif717 coolapi_close_all();718 }719 720 695 // this is very important - do not remove 721 696 if (cl->typ != 's') { … … 732 707 } 733 708 734 cs_cleanup();735 736 709 if (!exit_oscam) 737 710 exit_oscam = sig?sig:1; 738 739 if (sig == SIGINT)740 exit(sig);741 711 } 742 712 … … 838 808 cs_sleepms(300); // wait a little bit 839 809 //alarm(cfg.cmaxidle + cfg.ctimeout / 1000 + 1); 840 } while (!card_init_done );841 if (cfg.waitforcards_extra_delay>0 )810 } while (!card_init_done && !exit_oscam); 811 if (cfg.waitforcards_extra_delay>0 && !exit_oscam) 842 812 cs_sleepms(cfg.waitforcards_extra_delay); 843 813 cs_log("init for all local cards done"); … … 1238 1208 exit(1); 1239 1209 1240 //set signal handler for the restart daemon: 1241 set_signal_handler(SIGTERM, 0, fwd_sig); 1210 //set signal handler for the restart daemon: 1211 set_signal_handler(SIGINT, 3, fwd_sig); 1212 #if defined(__APPLE__) 1213 set_signal_handler(SIGEMT, 3, fwd_sig); 1214 #endif 1215 set_signal_handler(SIGTERM, 3, fwd_sig); 1242 1216 set_signal_handler(SIGQUIT, 0, fwd_sig); 1243 1217 set_signal_handler(SIGHUP , 0, fwd_sig); 1218 set_signal_handler(SIGUSR1, 0, fwd_sig); 1219 set_signal_handler(SIGUSR2, 0, fwd_sig); 1220 set_signal_handler(SIGALRM , 0, fwd_sig); 1221 set_signal_handler(SIGWINCH, 1, SIG_IGN); 1222 set_signal_handler(SIGPIPE , 0, SIG_IGN); 1223 set_signal_handler(OSCAM_SIGNAL_WAKEUP, 0, SIG_IGN); 1244 1224 1245 1225 //restart control process: … … 1424 1404 1425 1405 parse_cmdline_params(argc, argv); 1426 init_signal(true);1427 1406 1428 1407 if (bg && do_daemon(1,0)) … … 1490 1469 init_readerdb(); 1491 1470 cfg.account = init_userdb(); 1492 init_signal( false);1471 init_signal(); 1493 1472 init_srvid(); 1494 1473 init_tierid(); … … 1548 1527 // main loop function 1549 1528 client_check(); 1550 1529 1530 // Cleanup 1551 1531 azbox_close(); 1552 1532 coolapi_close_all(); 1553 1533 mca_close(); 1554 1555 cs_cleanup(); 1556 1534 led_status_stopping(); 1535 led_stop(); 1536 lcd_thread_stop(); 1537 1538 #if !defined(__CYGWIN__) 1539 char targetfile[256]; 1540 snprintf(targetfile, 255, "%s%s", get_tmp_dir(), "/oscam.version"); 1541 if (unlink(targetfile) < 0) 1542 cs_log("cannot remove oscam version file %s (errno=%d %s)", targetfile, errno, strerror(errno)); 1543 #endif 1544 1545 cs_cleanup(); 1557 1546 stop_garbage_collector(); 1558 1547
Note:
See TracChangeset
for help on using the changeset viewer.