From 4be7a59b5a5253e90a299b56eb188c8b970c07b5 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Mon, 12 Dec 2011 18:08:27 +0100 Subject: Handle SIGINT signal in pcitool --- ToDo | 1 + cli.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/ToDo b/ToDo index a4e6996..6c7004e 100644 --- a/ToDo +++ b/ToDo @@ -20,6 +20,7 @@ Normal Priority (it would make just few things a bit easier) 3. Provide OR and AND operations on registers in cli 4. Support writting a data from a binary file in cli 5. Use bus-addresses instead of physcial addresses for DMA + 6. Use pthread_condition_t instead of polling Low Priority (only as generalization for other projects) ============ diff --git a/cli.c b/cli.c index 2dbace5..5fc3162 100644 --- a/cli.c +++ b/cli.c @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -284,6 +285,14 @@ argv[0]); exit(0); } +static int StopFlag = 0; + +static void signal_exit_handler(int signo) { + if (++StopFlag > 2) + exit(-1); +} + + void Error(const char *format, ...) { va_list ap; @@ -1314,6 +1323,11 @@ void *Monitor(void *user) { } while (ctx->run_flag) { + if (StopFlag) { + pcilib_stop(ctx->handle, PCILIB_EVENT_FLAG_STOP_ONLY); + break; + } + if (timeout) { if (pcilib_calc_time_to_deadline(&deadline) == 0) { memcpy(&deadline, (struct timeval*)&ctx->last_frame, sizeof(struct timeval)); @@ -2501,6 +2515,8 @@ int main(int argc, char **argv) { } } + signal(SIGINT, signal_exit_handler); + if (output) { ofile = fopen(output, "a+"); if (!ofile) { -- cgit v1.2.3