Ack.

regards,

Anders Widell


On 04/27/2017 03:55 PM, Hans Nordeback wrote:
> ---
>   src/base/sysf_tmr.c | 20 +++++++++++++++++---
>   1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/src/base/sysf_tmr.c b/src/base/sysf_tmr.c
> index d4bd8de12..42679e103 100644
> --- a/src/base/sysf_tmr.c
> +++ b/src/base/sysf_tmr.c
> @@ -447,12 +447,14 @@ static uint32_t ncs_tmr_wait(void)
>       struct timespec ts;
>       struct pollfd set;
>   
> +     m_NCS_LOCK(&gl_tcb.safe.enter_lock, NCS_LOCK_WRITE);
>       if (clock_gettime(CLOCK_MONOTONIC, &ts_start)) {
>               perror("clock_gettime with MONOTONIC Failed \n");
>               return NCSCC_RC_FAILURE;
>       }
>   
>       ts_current = ts_start;
> +     m_NCS_UNLOCK(&gl_tcb.safe.enter_lock, NCS_LOCK_WRITE);
>   
>       while (true) {
>               set.fd = m_GET_FD_FROM_SEL_OBJ(gl_tcb.sel_obj);
> @@ -781,12 +783,21 @@ tmr_t ncs_tmr_start(tmr_t tid,
>                             TMR_STATE_DESTROY); /* TmrSvc ignores 'old' one */
>               tmr = new_tmr;
>       }
> -     scaled = (tmrDelay * 10 / NCS_MILLISECONDS_PER_TICK) + 1 +
> -              (get_time_elapsed_in_ticks(&ts_start));
>   
>       /* Lock the enter wheel in the safe area */
>       m_NCS_LOCK(&gl_tcb.safe.enter_lock, NCS_LOCK_WRITE);
>   
> +     if (ts_start.tv_sec == 0 && ts_start.tv_nsec == 0) {
> +             if (clock_gettime(CLOCK_MONOTONIC, &ts_start)) {
> +             syslog(LOG_ERR, "clock_gettime with MONOTONIC Failed \n");
> +             m_NCS_UNLOCK(&gl_tcb.safe.enter_lock, NCS_LOCK_WRITE);
> +             return NULL;
> +             }
> +     }
> +
> +     scaled = (tmrDelay * 10 / NCS_MILLISECONDS_PER_TICK) + 1 +
> +              (get_time_elapsed_in_ticks(&ts_start));
> +
>       /* Do some up front initialization as if all will go well */
>       tmr->tmrCB = tmrCB;
>       tmr->tmrUarg = tmrUarg;
> @@ -989,9 +1000,12 @@ int64_t ncs_tmr_remaining(tmr_t tmrID, int64_t *p_tleft)
>                            NCS_LOCK_WRITE); /* critical region START */
>               return NCSCC_RC_FAILURE;
>       }
> +
> +     ticks_elapsed = get_time_elapsed_in_ticks(&ts_start);
> +
>       m_NCS_UNLOCK(&gl_tcb.safe.enter_lock,
>                    NCS_LOCK_WRITE); /* critical region START */
> -     ticks_elapsed = get_time_elapsed_in_ticks(&ts_start);
> +
>       ticks_to_expiry = m_NCS_OS_NTOHLL_P(&tmr->key);
>       total_ticks_left = (ticks_to_expiry - ticks_elapsed);
>   


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to