#endif
volatile sig_atomic_t status_snapshot = 0;
+volatile sig_atomic_t finish_requested = 0;
unsigned int debugging = 0;
void print_netdata(void);
void print_global_stats(void);
void main_loop();
-void sigstatus();
+void signal_handler(int);
void finish();
const char* sprint_tm(int64_t t);
void ev_enqueue(struct event_queue *queue, struct event *event);
init_ping_buffer_ipv6(ping_data_size);
#endif
- signal(SIGINT, finish);
- signal(SIGQUIT, sigstatus);
+ signal(SIGINT, signal_handler);
+ signal(SIGQUIT, signal_handler);
setlinebuf(stdout);
if (report_interval) {
break;
}
+ /* end of loop was requested by interrupt signal handler */
+ if (finish_requested) {
+ break;
+ }
+
/* Receive replies */
/* (this is what sleeps during each loop iteration) */
dbg_printf("waiting up to %ld ms\n", wait_time/100);
/************************************************************
- Function: sigstatus
+ Function: signal_handler
*************************************************************
- Inputs: void (none)
+ Inputs: int signum
Description:
SIGQUIT signal handler - set flag and return
+ SIGINT signal handler - set flag and return
************************************************************/
-void sigstatus()
+void signal_handler(int signum)
{
- status_snapshot = 1;
+ switch (signum) {
+ case SIGINT:
+ finish_requested = 1;
+ break;
+
+ case SIGQUIT:
+ status_snapshot = 1;
+ break;
+ }
}