From 16a25f206a01adfe4ff400e1acb8af9fed682054 Mon Sep 17 00:00:00 2001 From: Tamas TEVESZ Date: Fri, 6 Dec 2013 08:01:27 +0100 Subject: [PATCH] Rework Unix delay_s()/delay_ms() Make delay_ms() sleep through the entire specified interval unless Ctrl-C is pressed; Using this feature, simplify Ctrl-C checking in places. --- drivers/fet3.c | 3 +-- drivers/goodfet.c | 2 +- drivers/pif.c | 2 +- drivers/tilib.c | 2 +- util/util.c | 23 +++++++++++++++++------ 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/drivers/fet3.c b/drivers/fet3.c index 2cb3e16..4e00c14 100644 --- a/drivers/fet3.c +++ b/drivers/fet3.c @@ -184,8 +184,7 @@ static device_status_t fet3_poll(device_t dev_base) /* We don't support breakpoints yet, so there's nothing to poll * for. */ - delay_ms(500); - if (ctrlc_check()) + if(delay_ms(500) < 0) return DEVICE_STATUS_INTR; return DEVICE_STATUS_RUNNING; diff --git a/drivers/goodfet.c b/drivers/goodfet.c index ddddeb0..4f5bae0 100644 --- a/drivers/goodfet.c +++ b/drivers/goodfet.c @@ -578,7 +578,7 @@ static device_status_t goodfet_poll(device_t dev_base) { (void)dev_base; - if (delay_ms(100) < 0 || ctrlc_check()) + if (delay_ms(100) < 0) return DEVICE_STATUS_INTR; return DEVICE_STATUS_RUNNING; diff --git a/drivers/pif.c b/drivers/pif.c index 760242a..02f53ad 100644 --- a/drivers/pif.c +++ b/drivers/pif.c @@ -301,7 +301,7 @@ static int pif_ctl(device_t dev_base, device_ctl_t type) /*----------------------------------------------------------------------------*/ static device_status_t pif_poll(device_t dev_base) { - if (delay_ms(100) < 0 || ctrlc_check()) + if (delay_ms(100) < 0) return DEVICE_STATUS_INTR; return DEVICE_STATUS_RUNNING; diff --git a/drivers/tilib.c b/drivers/tilib.c index 9453799..c784c86 100644 --- a/drivers/tilib.c +++ b/drivers/tilib.c @@ -531,7 +531,7 @@ static device_status_t tilib_poll(device_t dev_base) { struct tilib_device *dev = (struct tilib_device *)dev_base; - if ((delay_ms(50) < 0) || ctrlc_check()) + if (delay_ms(50) < 0) return DEVICE_STATUS_INTR; if (event_fetch(dev) & MID_HALT_ANY) diff --git a/util/util.c b/util/util.c index 3c9c8bf..0445e36 100644 --- a/util/util.c +++ b/util/util.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include @@ -29,6 +28,7 @@ #include #endif +#include "ctrlc.h" #include "util.h" #include "output.h" @@ -283,17 +283,28 @@ int delay_ms(unsigned int s) #else int delay_s(unsigned int s) { - return sleep(s); + return delay_ms(1000 * s); } int delay_ms(unsigned int s) { - struct timespec ts; + struct timespec rq, rm; + int ret; - ts.tv_sec = s / 1000; - ts.tv_nsec = (s % 1000) * 1000000; + rm.tv_sec = s / 1000; + rm.tv_nsec = (s % 1000) * 1000000; - return nanosleep(&ts, NULL); + do { + if (ctrlc_check()) { + ret = -1; + break; + } + rq.tv_sec = rm.tv_sec; + rq.tv_nsec = rm.tv_nsec; + ret = nanosleep(&rq, &rm); + } while(ret == -1 && errno == EINTR); + + return ret; } #endif