Ack with comment:

osaf_timespec_compare(&current_ts, &evt->entered_at) < 1

On the line above you compare with 1, i.e. you require current time to 
be strictly greater than the entered time. In theory, the time stamps 
could be exactly the same, so you should compare with zero instead.

/ Anders Widell

On 05/22/2014 03:41 PM, Lennart Lund wrote:
>   osaf/services/saf/logsv/lgs/lgs_evt.c  |  32 
> ++++++++++++++++++++------------
>   osaf/services/saf/logsv/lgs/lgs_file.c |  24 +++++++-----------------
>   osaf/services/saf/logsv/lgs/lgs_mds.c  |   5 +++--
>   3 files changed, 30 insertions(+), 31 deletions(-)
>
>
> Use opensaf time calculation help functions
>
> diff --git a/osaf/services/saf/logsv/lgs/lgs_evt.c 
> b/osaf/services/saf/logsv/lgs/lgs_evt.c
> --- a/osaf/services/saf/logsv/lgs/lgs_evt.c
> +++ b/osaf/services/saf/logsv/lgs/lgs_evt.c
> @@ -20,6 +20,7 @@
>   #include <limits.h>
>   
>   #include "immutil.h"
> +#include "osaf_time.h"
>   
>   #include "lgs.h"
>   #include "lgs_util.h"
> @@ -1251,19 +1252,26 @@ static uint32_t process_api_evt(lgsv_lgs
>               goto done;
>       }
>   
> -     // Discard too old messages. Don't discard writes as they are async,
> -     // no one is waiting on a response
> +     /* Discard too old messages. Don't discard writes as they are async,
> +      * no one is waiting on a response.
> +      * Using osaf time functions will guarantee that code works on 32 and 
> 64 bit
> +      * systems.
> +      */
>       if (api_type < LGSV_WRITE_LOG_ASYNC_REQ) {
> -             struct timespec ts;
> -             osafassert(clock_gettime(CLOCK_MONOTONIC, &ts) == 0);
> -
> -             // convert to milliseconds
> -             uint64_t entered = (evt->entered_at.tv_sec * 1000) +
> -                      (evt->entered_at.tv_nsec / 1000000);
> -             uint64_t removed = (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000);
> -
> -             // compare with sync send time used in library
> -             if ((removed - entered) > (LGS_WAIT_TIME * 10)) {
> +             struct timespec current_ts, diff_ts;
> +             osaf_clock_gettime(CLOCK_MONOTONIC, &current_ts);
> +             
> +             /* Calculate time diff current - entered */
> +             if (osaf_timespec_compare(&current_ts, &evt->entered_at) < 1) {
> +                     LOG_ER("%s - Entered message time > current time", 
> __FUNCTION__);
> +                     osafassert(0);
> +             }
> +             osaf_timespec_subtract(&current_ts, &evt->entered_at, &diff_ts);
> +             
> +             /* Convert to millisec and compare with sync send time used in
> +              * library
> +              */
> +             if (osaf_timespec_to_millis(&diff_ts) > (LGS_WAIT_TIME * 10)) {
>                       LOG_IN("discarded message from %" PRIx64 " type %u",
>                               evt->fr_dest, api_type);
>                       goto done;
> diff --git a/osaf/services/saf/logsv/lgs/lgs_file.c 
> b/osaf/services/saf/logsv/lgs/lgs_file.c
> --- a/osaf/services/saf/logsv/lgs/lgs_file.c
> +++ b/osaf/services/saf/logsv/lgs/lgs_file.c
> @@ -34,15 +34,14 @@
>   
>   #include "lgs.h"
>   #include "osaf_utility.h"
> -
> -#define GETTIME(x) osafassert(clock_gettime(CLOCK_REALTIME, &x) == 0);
> +#include "osaf_time.h"
>   
>   pthread_mutex_t lgs_ftcom_mutex;    /* For locking communication */
>   static pthread_cond_t request_cv;   /* File thread waiting for request */
>   static pthread_cond_t answer_cv;    /* API waiting for answer (timed) */
>   
>   /* Max time to wait for file thread to finish */
> -static SaUint32T max_waittime_ms = 500;
> +static uint32_t max_waittime_ms = 500;
>   
>   struct file_communicate {
>       bool request_f; /* True if pending request */
> @@ -82,22 +81,13 @@ static int start_file_thread(void);
>    * @param timeout_time[out]
>    * @param timeout_ms[in] in ms
>    */
> -static void get_timeout_time(struct timespec *timeout_time, long int 
> timeout_ms)
> +static void get_timeout_time(struct timespec *timeout_time, uint32_t 
> timeout_ms)
>   {
> -     struct timespec start_time;
> -     uint64_t millisec1,millisec2;
> +     struct timespec start_time, add_time;
>       
> -     GETTIME(start_time);
> -     
> -     /* Convert to ms */
> -     millisec1 = (start_time.tv_sec * 1000) + (start_time.tv_nsec / 1000000);
> -     
> -     /* Add timeout time */
> -     millisec2 = millisec1+timeout_ms;
> -     
> -     /* Convert back to timespec */
> -     timeout_time->tv_sec = millisec2 / 1000;
> -     timeout_time->tv_nsec = (millisec2 % 1000) * 1000000;
> +     osaf_clock_gettime(CLOCK_REALTIME, &start_time);
> +     osaf_millis_to_timespec((uint64_t) timeout_ms, &add_time);
> +     osaf_timespec_add(&start_time, &add_time, timeout_time);
>   }
>   
>   
> /*****************************************************************************
> diff --git a/osaf/services/saf/logsv/lgs/lgs_mds.c 
> b/osaf/services/saf/logsv/lgs/lgs_mds.c
> --- a/osaf/services/saf/logsv/lgs/lgs_mds.c
> +++ b/osaf/services/saf/logsv/lgs/lgs_mds.c
> @@ -17,6 +17,7 @@
>   
>   #include <ncsencdec_pub.h>
>   #include "lgs.h"
> +#include "osaf_time.h"
>   
>   #define LGS_SVC_PVT_SUBPART_VERSION 1
>   #define LGS_WRT_LGA_SUBPART_VER_AT_MIN_MSG_FMT 1
> @@ -890,7 +891,7 @@ static uint32_t mds_rcv(struct ncsmds_ca
>   
>       // for all msg types but WRITEs, sample curr time and store in msg
>       if ((type == LGSV_INITIALIZE_REQ) || (type == LGSV_STREAM_OPEN_REQ)) {
> -             osafassert(clock_gettime(CLOCK_MONOTONIC, &evt->entered_at) == 
> 0);
> +             osaf_clock_gettime(CLOCK_MONOTONIC, &evt->entered_at);
>               rc = m_NCS_IPC_SEND(&lgs_mbx, evt, LGS_IPC_PRIO_CTRL_MSGS);
>               osafassert(rc == NCSCC_RC_SUCCESS);
>               return NCSCC_RC_SUCCESS;
> @@ -899,7 +900,7 @@ static uint32_t mds_rcv(struct ncsmds_ca
>       prio = getmboxprio(api_info);
>   
>       if ((type == LGSV_FINALIZE_REQ) || (type == LGSV_STREAM_CLOSE_REQ)) {
> -             osafassert(clock_gettime(CLOCK_MONOTONIC, &evt->entered_at) == 
> 0);
> +             osaf_clock_gettime(CLOCK_MONOTONIC, &evt->entered_at);
>               rc = m_NCS_IPC_SEND(&lgs_mbx, evt, prio);
>               if (rc != NCSCC_RC_SUCCESS) {
>                       /* Bump prio and try again, should succeed! */


------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to