From d1e8d44990eb9e1bb7280ccff07b0d396fdcc0ae Mon Sep 17 00:00:00 2001 From: Robert Gustafsson Date: Sat, 14 Oct 2017 14:48:28 +0200 Subject: Add statistics after SIGINT --- broccoli/src/midbro.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'broccoli/src/midbro.c') diff --git a/broccoli/src/midbro.c b/broccoli/src/midbro.c index 6c83207..e2f9644 100644 --- a/broccoli/src/midbro.c +++ b/broccoli/src/midbro.c @@ -1,5 +1,6 @@ #include #include +#include #include "fifoqueue.h" #include "broevent.h" #include "midbro.h" @@ -8,7 +9,24 @@ #endif Fifo_q * queue; +pthread_t event_listener; +sigset_t signal_set; + void +sigint_handler(int signal) +{ + printf("\nStatistics:\n" + "Total values received: %d\n" + "Total values dropped: %d\n" + "Total values released: %d\n" + "Maximum buffer utilization: %d\n" + "Buffer fixed size: %d\n" + "Buffer size upon termination: %d\n", + queue->valuesReceived, queue->droppedValues, + queue->valuesReleased, queue->largestBufferSize, + queue->maxSize, queue->currentSize); + exit(0); +} void request_n_values(int number, int arrayOfValues[]) { @@ -37,12 +55,20 @@ request_value() start_data_capture() { int res; - queue = init_queue(500000); /* Initiate queue with fixed size */ - pthread_t event_listener; + queue = init_queue(500); /* Initiate queue with fixed size */ /* Create producer thread that listen for bro events */ + sigemptyset(&signal_set); + sigaddset(&signal_set, SIGINT); + res = pthread_sigmask(SIG_BLOCK, &signal_set, NULL); + if(res != 0) + perror("SIGINT block"); res = pthread_create(&event_listener, NULL, bro_event_listener, queue); if(res){ perror("Unable to create thread"); exit(-1); } + res = pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL); + if(res != 0) + perror("SIGINT unblock"); + signal(SIGINT, sigint_handler); } -- cgit v1.2.1