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