osaf/libs/common/immsv/include/immsv.h       |    8 +
 osaf/services/saf/immsv/immnd/ImmModel.cc    |  132 ++++++++++++--------------
 osaf/services/saf/immsv/immnd/ImmSearchOp.cc |    2 +-
 osaf/services/saf/immsv/immnd/ImmSearchOp.hh |    6 +-
 osaf/services/saf/immsv/immnd/immnd.h        |   16 ---
 osaf/services/saf/immsv/immnd/immnd_cb.h     |    8 +-
 6 files changed, 78 insertions(+), 94 deletions(-)


Use high resolution time measurements for ImmModel.

diff --git a/osaf/libs/common/immsv/include/immsv.h 
b/osaf/libs/common/immsv/include/immsv.h
--- a/osaf/libs/common/immsv/include/immsv.h
+++ b/osaf/libs/common/immsv/include/immsv.h
@@ -36,6 +36,7 @@
 #include "ncs_main_papi.h"
 
 #include <logtrace.h>
+#include "osaf_time.h"
 
 #include "immsv_evt.h"
 /* IMMSV Common Macros */
@@ -46,4 +47,11 @@
 
 #define m_IMMSV_CONVERT_SATIME_TEN_MILLI_SEC(t)      (t)/(10000000)    /* 10^7 
*/
 
+static inline int osaf_timer_is_expired_sec(const struct timespec* end, const 
struct timespec* start,
+                                             uint32_t timeout) {
+    struct timespec expiry = *start;
+    expiry.tv_sec += timeout;
+    return osaf_timespec_compare(end, &expiry) == - 1 ? 0 : 1;
+}
+
 #endif   /* IMMSV_H */
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc 
b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -41,11 +41,11 @@
 
 struct ContinuationInfo2
 {
-    ContinuationInfo2():mCreateTime(0), mConn(0), mTimeout(0), mImplId(0){}
+    ContinuationInfo2():mCreateTime(kZeroSeconds), mConn(0), mTimeout(0), 
mImplId(0){}
     ContinuationInfo2(SaUint32T conn, SaUint32T timeout):mConn(conn), 
mTimeout(timeout),
          mImplId(0)
-         {osaf_clock_gettime_sec(CLOCK_MONOTONIC, 
&mCreateTime);osafassert(mCreateTime >= ((time_t) 0));} 
-    time_t  mCreateTime;
+         {osaf_clock_gettime(CLOCK_MONOTONIC, &mCreateTime);}
+    timespec  mCreateTime;
     SaUint32T mConn;
     SaUint32T mTimeout; //0=> no timeout. Otherwise timeout in SECONDS.
     //Default copy constructor and assignement operator used in 
ContinuationMap2
@@ -349,7 +349,7 @@ struct CcbInfo
 {
     CcbInfo(): mId(0), mAdminOwnerId(0), mCcbFlags(0), mOriginatingConn(0),
                mOriginatingNode(0), mState(IMM_CCB_ILLEGAL), mVeto(SA_AIS_OK),
-               mWaitStartTime((time_t) 0), mOpCount(0), mPbeRestartId(0),
+               mWaitStartTime(kZeroSeconds), mOpCount(0), mPbeRestartId(0),
                mErrorStrings(NULL), mAugCcbParent(NULL), mPurged(false) {}
     bool isOk() {return mVeto == SA_AIS_OK;}
     bool isActive() {return (mState < IMM_CCB_COMMITTED);}
@@ -369,7 +369,7 @@ struct CcbInfo
     CcbImplementerMap mImplementers;
     ObjectMutationMap mMutations;
     SaAisErrorT       mVeto;  //SA_AIS_OK as long as no "participan" voted 
error.
-    time_t            mWaitStartTime;
+    timespec          mWaitStartTime;
     SaUint32T         mOpCount;
     SaUint32T         mPbeRestartId; /* ImplId for new PBE to resolve CCBs in 
critical */
     ImplementerSet    mLocalAppliers;
@@ -1250,11 +1250,10 @@ immModel_cleanTheBasement(IMMND_CB *cb,
         osafassert(ix==(*pbePrtoReqArrSize));
     }
 
-    time_t now;
-    osaf_clock_gettime_sec(CLOCK_MONOTONIC, &now);
-    osafassert(now >= ((time_t) 0));
-    time_t nextSearch = 0;
-    time_t opSearchTime;
+    timespec now;
+    osaf_clock_gettime(CLOCK_MONOTONIC, &now);
+    timespec nextSearch;
+    timespec opSearchTime;
     ImmSearchOp *op;
     IMMND_OM_SEARCH_NODE *searchOp;
     IMMND_OM_SEARCH_NODE **prevSearchOp;
@@ -1263,7 +1262,7 @@ immModel_cleanTheBasement(IMMND_CB *cb,
     int clearCounter = 0;
     while(cl_node) {
         if(!cl_node->mIsSync && cl_node->searchOpList
-                && (now - cl_node->mLastSearch > SEARCH_TIMEOUT_SEC)) {
+                && osaf_timer_is_expired_sec(&now, &cl_node->mLastSearch, 
SEARCH_TIMEOUT_SEC)) {
             nextSearch = now;
             clearCounter = 0;
             searchOp = cl_node->searchOpList;
@@ -1272,7 +1271,7 @@ immModel_cleanTheBasement(IMMND_CB *cb,
                 osafassert(searchOp->searchOp);
                 op = (ImmSearchOp *)searchOp->searchOp;
                 opSearchTime = op->getLastSearchTime();
-                if(!op->isSync() && now - opSearchTime > SEARCH_TIMEOUT_SEC) {
+                if(!op->isSync() && osaf_timer_is_expired_sec(&now, 
&opSearchTime, SEARCH_TIMEOUT_SEC)) {
                     TRACE_2("Clear search result. Timeout %dsec. Search id: 
%d, OM handle: %llx",
                             SEARCH_TIMEOUT_SEC, searchOp->searchId, 
cl_node->imm_app_hdl);
                     *prevSearchOp = searchOp->next;
@@ -1281,7 +1280,7 @@ immModel_cleanTheBasement(IMMND_CB *cb,
                     searchOp = *prevSearchOp;
                     clearCounter++;
                 } else {
-                    if(opSearchTime < nextSearch) {
+                    if(osaf_timespec_compare(&opSearchTime, &nextSearch) == 
-1) {
                         nextSearch = opSearchTime;
                     }
                     prevSearchOp = &searchOp->next;
@@ -5189,7 +5188,7 @@ ImmModel::ccbCreate(SaUint32T adminOwner
     info->mOriginatingConn = originatingConn;
     info->mVeto = SA_AIS_OK;
     info->mState = IMM_CCB_EMPTY;
-    info->mWaitStartTime = 0;
+    info->mWaitStartTime = kZeroSeconds;
     info->mOpCount = 0;
     info->mPbeRestartId = 0;
     info->mErrorStrings = NULL;
@@ -5578,9 +5577,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
                 //Wait for ack, possibly remote
                 implAssoc->mWaitForImplAck = true; 
                 implAssoc->mContinuationId = sLastContinuationId;/* 
incremented above */
-                if(ccb->mWaitStartTime == 0) {
-                    osaf_clock_gettime_sec(CLOCK_MONOTONIC, 
&ccb->mWaitStartTime);
-                    osafassert(ccb->mWaitStartTime >= ((time_t) 0));
+                if(osaf_timespec_compare(&ccb->mWaitStartTime, &kZeroSeconds) 
== 0) {
+                    osaf_clock_gettime(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
                     TRACE("Wait timer for completed started for ccb:%u", 
                         ccb->mId);
                 }
@@ -5975,7 +5973,7 @@ ImmModel::ccbCommit(SaUint32T ccbId, Con
         osafassert(ccb->mState == IMM_CCB_CRITICAL);
         TRACE_5("Comitting Ccb %u in IMMND", ccbId);
     }
-    ccb->mWaitStartTime = 0;
+    ccb->mWaitStartTime = kZeroSeconds;
 
     //Do the actual commit!
     ObjectMutationMap::iterator omit;
@@ -6179,7 +6177,7 @@ ImmModel::ccbAbort(SaUint32T ccbId, Conn
             "OI timeout or explicit abort request.");
     }
 
-    ccb->mWaitStartTime = 0;
+    ccb->mWaitStartTime = kZeroSeconds;
     
     CcbImplementerMap::iterator isi;
     for(isi = ccb->mImplementers.begin();
@@ -6429,9 +6427,8 @@ ImmModel::ccbTerminate(SaUint32T ccbId)
         ccb->mLocalAppliers.clear();
         /*  Retain the ccb info to allow ccb result recovery. */
 
-        if(ccb->mWaitStartTime == 0)  {
-            osaf_clock_gettime_sec(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
-            osafassert(ccb->mWaitStartTime >= ((time_t) 0));
+        if(osaf_timespec_compare(&ccb->mWaitStartTime, &kZeroSeconds) == 0)  {
+            osaf_clock_gettime(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
             TRACE_5("Ccb Wait-time for GC set. State: %u/%s", ccb->mState,
                 (ccb->mState == IMM_CCB_COMMITTED)?"COMMITTED":
                 ((ccb->mState == IMM_CCB_ABORTED)?"ABORTED":"OTHER"));
@@ -6638,7 +6635,7 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
         ccb->mState = IMM_CCB_READY;
     }
 
-    ccb->mWaitStartTime = 0;
+    ccb->mWaitStartTime = kZeroSeconds;
     ccb->mErrorStrings = NULL;
 
  done:
@@ -8298,8 +8295,7 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
                 TRACE_5("THERE IS AN IMPLEMENTER %u conn:%u node:%x name:%s\n",
                     object->mImplementer->mId, *implConn, *implNodeId,
                     object->mImplementer->mImplementerName.c_str());
-                osaf_clock_gettime_sec(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
-                osafassert(ccb->mWaitStartTime >= ((time_t) 0));
+                osaf_clock_gettime(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
             } else if(className == immMngtClass) {
                 if(sImmNodeState == IMM_NODE_LOADING) {
                     if(objectName != immManagementDn) {
@@ -9520,8 +9516,7 @@ ImmModel::ccbObjectModify(const ImmsvOmC
                 object->mImplementer->mId, *implConn, *implNodeId,
                 object->mImplementer->mImplementerName.c_str());
             
-            osaf_clock_gettime_sec(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
-            osafassert(ccb->mWaitStartTime >= ((time_t) 0));
+            osaf_clock_gettime(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
         } else if(ccb->mCcbFlags & SA_IMM_CCB_REGISTERED_OI) {
             if((object->mImplementer == NULL) && 
                (ccb->mCcbFlags & SA_IMM_CCB_ALLOW_NULL_OI)) {
@@ -10130,8 +10125,7 @@ ImmModel::deleteObject(ObjectMap::iterat
 
             SaUint32T implConn = oi->second->mImplementer->mConn;
             
-            osaf_clock_gettime_sec(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
-            osafassert(ccb->mWaitStartTime >= ((time_t) 0));
+            osaf_clock_gettime(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
             /* TODO: Resetting the ccb timer for each deleted object here. 
                Not so efficient. Should set it only when all objects
                are processed.
@@ -10350,7 +10344,7 @@ ImmModel::ccbWaitForDeleteImplAck(SaUint
         }
     }
     
-    ccb->mWaitStartTime = 0;
+    ccb->mWaitStartTime = kZeroSeconds;
     ccb->mState = IMM_CCB_READY;
     TRACE_LEAVE();
     return false;
@@ -10418,7 +10412,7 @@ ImmModel::ccbWaitForCompletedAck(SaUint3
             *err = SA_AIS_ERR_INTERRUPT;
         }
 
-        ccb->mWaitStartTime = 0;
+        ccb->mWaitStartTime = kZeroSeconds;
         return false;
     }
 
@@ -10435,7 +10429,7 @@ ImmModel::ccbWaitForCompletedAck(SaUint3
         if((*err) != SA_AIS_OK) {
             ccb->mState = IMM_CCB_PBE_ABORT;
         }
-        ccb->mWaitStartTime = 0;
+        ccb->mWaitStartTime = kZeroSeconds;
         return false;
     }
 
@@ -10472,8 +10466,7 @@ ImmModel::ccbWaitForCompletedAck(SaUint3
                objects write locked by the ccb) until we know the outcome.
                Restart the timer to catch ccbs hung waiting on PBE.
             */
-             osaf_clock_gettime_sec(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
-             osafassert(ccb->mWaitStartTime >= ((time_t) 0));
+             osaf_clock_gettime(CLOCK_MONOTONIC, &ccb->mWaitStartTime);
             return true; /* Wait for PBE commit*/
         } else {
             /* But there is not any PBE up currently => abort.  */
@@ -10810,7 +10803,7 @@ ImmModel::ccbObjCreateContinuation(SaUin
     } else {
         osafassert(omuti->second->mWaitForImplAck);
         omuti->second->mWaitForImplAck = false;
-        ccb->mWaitStartTime = 0;
+        ccb->mWaitStartTime = kZeroSeconds;
     }
     
     if(ccb->mAugCcbParent &&
@@ -10901,7 +10894,7 @@ ImmModel::ccbObjModifyContinuation(SaUin
     } else {
         osafassert(omuti->second->mWaitForImplAck);
         omuti->second->mWaitForImplAck = false;
-        ccb->mWaitStartTime = 0;
+        ccb->mWaitStartTime = kZeroSeconds;
     }
     
     if(ccb->mAugCcbParent &&
@@ -13516,13 +13509,12 @@ ImmModel::getOldCriticalCcbs(IdVector& c
     *pbeConnPtr = 0;
     *pbeIdPtr = 0;
     CcbVector::iterator i;
-    time_t now;
-    osaf_clock_gettime_sec(CLOCK_MONOTONIC, &now);
-    osafassert(now >= ((time_t) 0));
+    timespec now;
+    osaf_clock_gettime(CLOCK_MONOTONIC, &now);
     for(i=sCcbVector.begin(); i!=sCcbVector.end(); ++i) {
         if((*i)->mState == IMM_CCB_CRITICAL && 
-           (((*i)->mWaitStartTime && 
-             now - (*i)->mWaitStartTime >= DEFAULT_TIMEOUT_SEC)||/* Should be 
saImmOiTimeout*/
+           ((osaf_timespec_compare(&(*i)->mWaitStartTime, &kZeroSeconds) &&
+             osaf_timer_is_expired_sec(&now, &(*i)->mWaitStartTime, 
DEFAULT_TIMEOUT_SEC))||/* Should be saImmOiTimeout*/
              (*i)->mPbeRestartId))
         {
             /* We have a critical ccb that has: timed out OR lived through a 
PBE restart.
@@ -13579,9 +13571,12 @@ ImmModel::getOldCriticalCcbs(IdVector& c
                 continue;
             } 
 
-            if((ccb->mPbeRestartId == 0) && now - ccb->mWaitStartTime < 
(DEFAULT_TIMEOUT_SEC + addSecs)) {
-                LOG_NO("Ccb %u is old, but also large (%u) will wait 
secs:%ld", ccb->mId, mutations, 
-                    (DEFAULT_TIMEOUT_SEC + addSecs) - (now - 
ccb->mWaitStartTime));
+            if((ccb->mPbeRestartId == 0) &&
+                    osaf_timer_is_expired_sec(&now, &ccb->mWaitStartTime, 
(DEFAULT_TIMEOUT_SEC + addSecs))) {
+                timespec elapsed;
+                osaf_timespec_subtract(&now, &ccb->mWaitStartTime, &elapsed);
+                LOG_NO("Ccb %u is old, but also large (%u) will wait secs:%f", 
ccb->mId, mutations,
+                    (double) (DEFAULT_TIMEOUT_SEC + addSecs) - 
osaf_timespec_to_double(&elapsed));
                 continue;
             }
 
@@ -13696,7 +13691,8 @@ ImmModel::purgeSyncRequest(SaUint32T cli
     }
 
     for(i3=sCcbVector.begin(); i3!=sCcbVector.end(); ++i3) {
-        if(((*i3)->mOriginatingConn == clientId) && ((*i3)->mWaitStartTime > 
((time_t) 0))) {
+        if(((*i3)->mOriginatingConn == clientId) &&
+                osaf_timespec_compare(&(*i3)->mWaitStartTime, &kZeroSeconds) 
== 1) {
             SaUint32T ccbId = (*i3)->mId;
 
             if((*i3)->mState > IMM_CCB_CRITICAL) {
@@ -13736,9 +13732,8 @@ ImmModel::cleanTheBasement(InvocVector& 
     InvocVector& searchReqs, IdVector& ccbs, IdVector& pbePrtoReqs,
     bool iAmCoord)
 {
-    time_t now;
-    osaf_clock_gettime_sec(CLOCK_MONOTONIC, &now);
-    osafassert(now >= ((time_t) 0));
+    timespec now;
+    osaf_clock_gettime(CLOCK_MONOTONIC, &now);
     ContinuationMap2::iterator ci2;
     ImplementerEvtMap::iterator iem;
     CcbVector::iterator i3;
@@ -13748,14 +13743,15 @@ ImmModel::cleanTheBasement(InvocVector& 
     for(ci2=sAdmReqContinuationMap.begin(); 
         ci2!=sAdmReqContinuationMap.end();
         ++ci2) {
-        if(ci2->second.mTimeout && 
-            (now - ci2->second.mCreateTime >= (int) ci2->second.mTimeout)) {
+        if(ci2->second.mTimeout &&
+                osaf_timer_is_expired_sec(&now, &ci2->second.mCreateTime, 
ci2->second.mTimeout)) {
             TRACE_5("Timeout on AdministrativeOp continuation %llu  tmout:%u", 
                 ci2->first, ci2->second.mTimeout);
             admReqs.push_back(ci2->first);
         } else {
-            TRACE_5("Did not timeout now - start < %u(%lu)", 
ci2->second.mTimeout,
-                now - ci2->second.mCreateTime);
+            timespec elapsed;
+            osaf_timespec_subtract(&now, &ci2->second.mCreateTime, &elapsed);
+            TRACE_5("Did not timeout now - start < %u(%f)", 
ci2->second.mTimeout, osaf_timespec_to_double(&elapsed));
         }
     }
     
@@ -13769,7 +13765,7 @@ ImmModel::cleanTheBasement(InvocVector& 
     for(ci2=sSearchReqContinuationMap.begin(); 
         ci2!=sSearchReqContinuationMap.end();
         ++ci2) {
-        if(now - ci2->second.mCreateTime >= (int)ci2->second.mTimeout) {
+        if(osaf_timer_is_expired_sec(&now, &ci2->second.mCreateTime, 
ci2->second.mTimeout)) {
             TRACE_5("Timeout on Search continuation %llu", ci2->first);
             searchReqs.push_back(ci2->first);
         } 
@@ -13784,7 +13780,8 @@ ImmModel::cleanTheBasement(InvocVector& 
     while (i3 != sCcbVector.end()) {
         if((*i3)->mState > IMM_CCB_CRITICAL) {
             /* Garbage Collect ccbInfo more than five minutes old */
-            if((*i3)->mWaitStartTime && (now - (*i3)->mWaitStartTime >= 300)) {
+            if(osaf_timespec_compare(&(*i3)->mWaitStartTime, &kZeroSeconds) &&
+                    osaf_timer_is_expired_sec(&now, &(*i3)->mWaitStartTime, 
300)) {
                 TRACE_5("Removing CCB %u terminated more than 5 minutes ago", 
                     (*i3)->mId);
                 (*i3)->mState = IMM_CCB_ILLEGAL;
@@ -13800,8 +13797,8 @@ ImmModel::cleanTheBasement(InvocVector& 
             //Also handle the case of admin-op requesting abort of all 
non-critical ccbs.
             TRACE("Checking active ccb %u for deadlock or blocked implementer",
                 (*i3)->mId);
-            TRACE("state:%u waitsart:%u PberestartId:%u",(*i3)->mState, 
-                (unsigned int) (*i3)->mWaitStartTime, (*i3)->mPbeRestartId);
+            TRACE("state:%u waitsart:%f PberestartId:%u",(*i3)->mState,
+                osaf_timespec_to_double(&(*i3)->mWaitStartTime), 
(*i3)->mPbeRestartId);
 
             CcbImplementerMap::iterator cim;
             uint32_t max_oi_timeout = DEFAULT_TIMEOUT_SEC;
@@ -13818,7 +13815,8 @@ ImmModel::cleanTheBasement(InvocVector& 
             }
 
             uint32_t oi_timeout = ((*i3)->mState == IMM_CCB_CRITICAL) ? 
DEFAULT_TIMEOUT_SEC : max_oi_timeout;
-            if(((*i3)->mWaitStartTime && (now - (*i3)->mWaitStartTime >= 
(int)oi_timeout)) || /* normal timeout */
+            if((osaf_timespec_compare(&(*i3)->mWaitStartTime, &kZeroSeconds) &&
+                    osaf_timer_is_expired_sec(&now, &(*i3)->mWaitStartTime, 
oi_timeout)) || /* normal timeout */
                ((*i3)->mPbeRestartId) ||  /* CCB was critical when PBE 
restarted => Must ask new PBE for outcome */
                abortCcb)  /* Request to abort ALL non critical CCBs */
             {
@@ -13827,7 +13825,8 @@ ImmModel::cleanTheBasement(InvocVector& 
                     oi_timeout = 0;
                     TRACE_5("PBE restarted id:%u with ccb:%u in critical",
                         (*i3)->mPbeRestartId, (*i3)->mId);
-                } else if((*i3)->mWaitStartTime && (now - 
(*i3)->mWaitStartTime >= (int)max_oi_timeout)) {
+                } else if(osaf_timespec_compare(&(*i3)->mWaitStartTime, 
&kZeroSeconds) &&
+                        osaf_timer_is_expired_sec(&now, 
&(*i3)->mWaitStartTime, oi_timeout)) {
                     oi_timeout = 0;
                     TRACE_5("CCB %u timeout while waiting on implementer 
reply",
                         (*i3)->mId);
@@ -13849,7 +13848,7 @@ ImmModel::cleanTheBasement(InvocVector& 
                     if((*i3)->mPbeRestartId) {
                         LOG_WA("Ccb: %u in critical state when PBE restarted", 
(*i3)->mId);
                         ccbsStuck=1;
-                    } else if(now - (*i3)->mWaitStartTime >= 
(DEFAULT_TIMEOUT_SEC + addSecs)){
+                    } else if(osaf_timer_is_expired_sec(&now, 
&(*i3)->mWaitStartTime, (DEFAULT_TIMEOUT_SEC + addSecs))){
                         LOG_WA("Timeout (%d) on transaction in critical state! 
ccb:%u", 
                             (DEFAULT_TIMEOUT_SEC + addSecs), (*i3)->mId);
                         ccbsStuck=1;
@@ -13876,7 +13875,7 @@ ImmModel::cleanTheBasement(InvocVector& 
         //It needs to be long to allow reply on larger batch jobs such as a
         //schema/class change with instance migration and slow file system.
         //It can not be infinite as that could cause a memory leak.
-        if(now - ci2->second.mCreateTime >= (DEFAULT_TIMEOUT_SEC * 20)) {
+        if(osaf_timer_is_expired_sec(&now, &ci2->second.mCreateTime, 
(DEFAULT_TIMEOUT_SEC * 20))) {
             TRACE_5("Timeout on PbeRtReqContinuation %llu", ci2->first);
             pbePrtoReqs.push_back(ci2->second.mConn);
             sPbeRtReqContinuationMap.erase(ci2);
@@ -13889,7 +13888,7 @@ ImmModel::cleanTheBasement(InvocVector& 
     /* Remove old implementer detach times. */
     iem=sImplDetachTime.begin();
     while(iem!=sImplDetachTime.end()) {
-        if(now - iem->second.mCreateTime >= DEFAULT_TIMEOUT_SEC) {
+        if(osaf_timer_is_expired_sec(&now, &iem->second.mCreateTime, 
DEFAULT_TIMEOUT_SEC)) {
             TRACE_5("Timeout on sImplDetachTime implid:%u", iem->first->mId);
             sImplDetachTime.erase(iem);
             iem=sImplDetachTime.begin();
@@ -14138,8 +14137,7 @@ ImmModel::implementerSet(const IMMSV_OCT
                                 ccb->mImplementers[info->mId] = oldImplAssoc;
                                 TRACE_7("Replaced implid %u with %u", 
oldImplId, info->mId);
                                 ccb->mPbeRestartId = info->mId;
-                                osaf_clock_gettime_sec(CLOCK_MONOTONIC, 
&ccb->mWaitStartTime);/*Reset timer on new impl*/
-                                osafassert(ccb->mWaitStartTime >= ((time_t) 
0));
+                                osaf_clock_gettime(CLOCK_MONOTONIC, 
&ccb->mWaitStartTime);/*Reset timer on new impl*/
                                 /* Can only be one PBE impl asoc*/
                                 break;  /* out of for(isi = 
ccb->mImplementers....*/
                         }
@@ -18563,13 +18561,7 @@ ImmModel::finalizeSync(ImmsvOmFinalizeSy
                 newCcb->mOriginatingConn = 0;
                 newCcb->mVeto = SA_AIS_OK;
                 newCcb->mState = (ImmCcbState) (prt45allowed ? ol->ccbState : 
(ol->ccbState + 2));
-                osaf_clock_gettime_sec(CLOCK_MONOTONIC, 
&newCcb->mWaitStartTime);
-                if(newCcb->mWaitStartTime < ((time_t) 0)) {
-                    LOG_ER("newCcb->mWaitStartTime < 0");
-                    err = SA_AIS_ERR_FAILED_OPERATION;
-                    delete newCcb;
-                    goto done;
-                }
+                osaf_clock_gettime(CLOCK_MONOTONIC, &newCcb->mWaitStartTime);
                 newCcb->mOpCount=0;
                 newCcb->mPbeRestartId=0;
                 newCcb->mErrorStrings=NULL;
diff --git a/osaf/services/saf/immsv/immnd/ImmSearchOp.cc 
b/osaf/services/saf/immsv/immnd/ImmSearchOp.cc
--- a/osaf/services/saf/immsv/immnd/ImmSearchOp.cc
+++ b/osaf/services/saf/immsv/immnd/ImmSearchOp.cc
@@ -26,7 +26,7 @@ ImmSearchOp::ImmSearchOp()
     syncOsi=NULL;
     attrNameList=NULL;
     classInfo=NULL;
-    mLastSearch = 0;
+    mLastSearch = kZeroSeconds;
     mNonExtendedName = false;
 }
 
diff --git a/osaf/services/saf/immsv/immnd/ImmSearchOp.hh 
b/osaf/services/saf/immsv/immnd/ImmSearchOp.hh
--- a/osaf/services/saf/immsv/immnd/ImmSearchOp.hh
+++ b/osaf/services/saf/immsv/immnd/ImmSearchOp.hh
@@ -85,8 +85,8 @@ public:
     bool          isSync() {return mIsSync;}
     bool          isAccessor() {return mIsAccessor;}
     bool          isNonExtendedNameSet() {return mNonExtendedName;}
-    time_t        getLastSearchTime() { return mLastSearch; }
-    void          updateSearchTime() { osaf_clock_gettime_sec(CLOCK_MONOTONIC, 
&mLastSearch); }
+    timespec      getLastSearchTime() { return mLastSearch; }
+    void          updateSearchTime() { osaf_clock_gettime(CLOCK_MONOTONIC, 
&mLastSearch); }
     void          popLastResult() { mResultList.pop_front(); }
     void*         syncOsi;
     void*         attrNameList;
@@ -98,7 +98,7 @@ private:
     AttributeList mRtsToFetch;
     bool mIsSync;
     bool mIsAccessor;
-    time_t mLastSearch;
+    timespec mLastSearch;
     bool mNonExtendedName;
 };
 
diff --git a/osaf/services/saf/immsv/immnd/immnd.h 
b/osaf/services/saf/immsv/immnd/immnd.h
--- a/osaf/services/saf/immsv/immnd/immnd.h
+++ b/osaf/services/saf/immsv/immnd/immnd.h
@@ -31,7 +31,6 @@
 #include "immsv.h"
 #include "immnd_cb.h"
 #include "immnd_init.h"
-#include "osaf_time.h"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -44,19 +43,4 @@
 #endif
 
 
-/*
- * Get the time in seconds
- *
- * This is a wrapper function to get the clocktime in seconds.
- * Output vlaue will be in seconds.
- */
-
-static inline void osaf_clock_gettime_sec(clockid_t i_clk_id,
-        time_t* o_t)
-{
-       struct timespec o_ts;
-       osaf_clock_gettime(i_clk_id, &o_ts) ;
-       *o_t = o_ts.tv_sec;
-}
-
 #endif   /* IMMND_H */
diff --git a/osaf/services/saf/immsv/immnd/immnd_cb.h 
b/osaf/services/saf/immsv/immnd/immnd_cb.h
--- a/osaf/services/saf/immsv/immnd/immnd_cb.h
+++ b/osaf/services/saf/immsv/immnd/immnd_cb.h
@@ -67,10 +67,10 @@ typedef struct immnd_immom_client_node {
                                  The tmp client is then removed, anticipating
                                  a resurrect request by the IMMA.
                                */
-       time_t mLastSearch;             /* Time of the latest used search handle
-                                                          It is used to reduce 
number of iterations
-                                                          of inactive search 
handles.
-                                                        */
+       struct timespec mLastSearch;    /* Time of the latest used search handle
+                                                                          It 
is used to reduce number of iterations
+                                                                          of 
inactive search handles.
+                                                                        */
 } IMMND_IMM_CLIENT_NODE;
 
 /******************************************************************************

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to