ack, code review only/Thanks HansN
On 12/10/2015 11:38 AM, Anders Widell wrote:
> osaf/libs/core/common/include/osaf_time.h | 13 +++++++-
> osaf/libs/core/common/osaf_time.c | 51
> ++++++++++++------------------
> 2 files changed, 33 insertions(+), 31 deletions(-)
>
>
> Simplify osaf_nanosleep() by using clock_nanosleep() instead of nanosleep().
> Also add commonly used time constants to the header file.
>
> diff --git a/osaf/libs/core/common/include/osaf_time.h
> b/osaf/libs/core/common/include/osaf_time.h
> --- a/osaf/libs/core/common/include/osaf_time.h
> +++ b/osaf/libs/core/common/include/osaf_time.h
> @@ -56,6 +56,17 @@ enum {
> kMillisPerSec = 1000
> };
>
> +extern const struct timespec kZeroSeconds;
> +extern const struct timespec kTenMilliseconds;
> +extern const struct timespec kHundredMilliseconds;
> +extern const struct timespec kOneSecond;
> +extern const struct timespec kTwoSeconds;
> +extern const struct timespec kFiveSeconds;
> +extern const struct timespec kTenSeconds;
> +extern const struct timespec kFifteenSeconds;
> +extern const struct timespec kOneMinute;
> +extern const struct timespec kOneHour;
> +
> /**
> * @brief Sleep for the specified time
> *
> @@ -66,7 +77,7 @@ enum {
> * time. Thus, this function will never return earlier than the requested
> * time-out.
> */
> -extern void osaf_nanosleep(const struct timespec* i_req);
> +extern void osaf_nanosleep(const struct timespec* sleep_duration);
>
> /**
> * @brief Get the time
> diff --git a/osaf/libs/core/common/osaf_time.c
> b/osaf/libs/core/common/osaf_time.c
> --- a/osaf/libs/core/common/osaf_time.c
> +++ b/osaf/libs/core/common/osaf_time.c
> @@ -18,35 +18,26 @@
> #include "osaf_time.h"
> #include <errno.h>
>
> -void osaf_nanosleep(const struct timespec* i_req)
> +const struct timespec kZeroSeconds = { 0, 0 };
> +const struct timespec kTenMilliseconds = { 0, 10000000 };
> +const struct timespec kHundredMilliseconds = { 0, 100000000 };
> +const struct timespec kOneSecond = { 1, 0 };
> +const struct timespec kTwoSeconds = { 2, 0 };
> +const struct timespec kFiveSeconds = { 5, 0 };
> +const struct timespec kTenSeconds = { 10, 0 };
> +const struct timespec kFifteenSeconds = { 15, 0 };
> +const struct timespec kOneMinute = { 60, 0 };
> +const struct timespec kOneHour = { 3600, 0 };
> +
> +void osaf_nanosleep(const struct timespec* sleep_duration)
> {
> - struct timespec req = *i_req;
> - struct timespec start_time;
> - osaf_clock_gettime(CLOCK_MONOTONIC, &start_time);
> - for (;;) {
> - struct timespec current_time;
> - struct timespec elapsed_time;
> - /* We could have utilised the second parameter to nanosleep(),
> - * which will return the remaining sleep time in the case
> - * nanosleep() was interrupted by a signal. But this gives
> - * inaccurate sleep time, for various reasons. See the man page
> - * of nanosleep(2) for details.
> - */
> - int result = nanosleep(&req, NULL);
> - if (result == 0) break;
> - if (errno != EINTR) osaf_abort(result);
> - osaf_clock_gettime(CLOCK_MONOTONIC, ¤t_time);
> - osaf_timespec_subtract(¤t_time, &start_time,
> - &elapsed_time);
> - if (osaf_timespec_compare(¤t_time, &start_time) < 0) {
> - /* Handle the unlikely case that the elapsed time is
> - * negative. Shouldn't happen with a monotonic clock,
> - * but just to be on the safe side.
> - */
> - elapsed_time.tv_sec = 0;
> - elapsed_time.tv_nsec = 0;
> - }
> - if (osaf_timespec_compare(&elapsed_time, i_req) >= 0) break;
> - osaf_timespec_subtract(i_req, &elapsed_time, &req);
> - }
> + struct timespec wakeup_time;
> + osaf_clock_gettime(CLOCK_MONOTONIC, &wakeup_time);
> + osaf_timespec_add(&wakeup_time, sleep_duration, &wakeup_time);
> + int retval;
> + do {
> + retval = clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME,
> + &wakeup_time, NULL);
> + } while (retval < 0 && errno == EINTR);
> + if (retval < 0) osaf_abort(retval);
> }
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel