summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalvatore Sanfilippo <antirez@gmail.com>2014-06-17 23:38:02 +0200
committerSalvatore Sanfilippo <antirez@gmail.com>2014-06-17 23:38:02 +0200
commit3a482689c510bf8f2c8daca3ddd15af14ab036ac (patch)
tree2c2db2d06a67ad3005dcbaf7a93911db32b8db40
parent2c175912249ffabb2ffb60bae618701e8476a7b8 (diff)
parent20c2a38ad0b8ac54a0eef165bc4e1b58e599a7b1 (diff)
downloadredis-3a482689c510bf8f2c8daca3ddd15af14ab036ac.tar.gz
Merge pull request #1658 from mattsta/redis-cli-latency-clean-interrupt
Add SIGINT handler to cli --intrinsic-latency
-rw-r--r--src/redis-cli.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/redis-cli.c b/src/redis-cli.c
index b8e17d24e..bd3b72144 100644
--- a/src/redis-cli.c
+++ b/src/redis-cli.c
@@ -95,6 +95,7 @@ static struct config {
char *eval;
} config;
+static volatile sig_atomic_t force_cancel_loop = 0;
static void usage();
static void slaveMode(void);
char *redisGitSHA1(void);
@@ -1807,11 +1808,17 @@ unsigned long compute_something_fast(void) {
return output;
}
+static void intrinsicLatencyModeStop(int s) {
+ REDIS_NOTUSED(s);
+ force_cancel_loop = 1;
+}
+
static void intrinsicLatencyMode(void) {
long long test_end, run_time, max_latency = 0, runs = 0;
run_time = config.intrinsic_latency_duration*1000000;
test_end = ustime() + run_time;
+ signal(SIGINT, intrinsicLatencyModeStop);
while(1) {
long long start, end, latency;
@@ -1829,7 +1836,7 @@ static void intrinsicLatencyMode(void) {
printf("Max latency so far: %lld microseconds.\n", max_latency);
}
- if (end > test_end) {
+ if (force_cancel_loop || end > test_end) {
printf("\n%lld total runs (avg %lld microseconds per run).\n",
runs, run_time/runs);
printf("Worst run took %.02fx times the average.\n",