tr_comm_memb_set_comm(newmemb, comm);
tr_comm_memb_set_interval(newmemb, interval);
tr_comm_memb_set_provenance(newmemb, provenance);
+ tr_comm_memb_set_expiry(newmemb, expiry);
existing=tr_comm_table_find_idp_memb_origin(ctab,
tr_idp_realm_get_id(realm),
tr_comm_memb_set_comm(newmemb, comm);
tr_comm_memb_set_interval(newmemb, interval);
tr_comm_memb_set_provenance(newmemb, provenance);
+ tr_comm_memb_set_expiry(newmemb, expiry);
existing=tr_comm_table_find_rp_memb_origin(ctab,
tr_rp_realm_get_id(realm),
int tr_comm_memb_is_expired(TR_COMM_MEMB *memb, struct timespec *curtime)
{
+ tr_debug("tr_comm_memb_is_expired: (cur->tv_sec>memb->expiry->tv_sec)=(%u > %u)=%s",
+ curtime->tv_sec,
+ memb->expiry->tv_sec,
+ (curtime->tv_sec > memb->expiry->tv_sec)?"true":"false");
+
return ((curtime->tv_sec > memb->expiry->tv_sec)
|| ((curtime->tv_sec == memb->expiry->tv_sec)
&&(curtime->tv_nsec >= memb->expiry->tv_nsec)));
* has passed, returns an existing message but will not wait if one is
* not already available. If ts_abort is null, no blocking. Not
* guaranteed to wait if an error occurs - immediately returns without
- * a message. */
+ * a message. Use tr_mq_pop_timeout() to get an absolute time that
+ * is guaranteed compatible with this function. */
TR_MQ_MSG *tr_mq_pop(TR_MQ *mq, struct timespec *ts_abort)
{
TR_MQ_MSG *popped=NULL;
static struct timespec *trps_compute_expiry(TRPS_INSTANCE *trps, unsigned int interval, struct timespec *ts)
{
const unsigned int small_factor=3; /* how many intervals we wait before expiring */
- if (0!=clock_gettime(CLOCK_REALTIME, ts)) {
+ if (0!=clock_gettime(TRP_CLOCK, ts)) {
tr_err("trps_compute_expiry: could not read realtime clock.");
ts->tv_sec=0;
ts->tv_nsec=0;
}
+ tr_debug("trps_compute_expiry: tv_sec=%u, interval=%u, small_factor*interval=%u", ts->tv_sec, interval, small_factor*interval);
ts->tv_sec += small_factor*interval;
return ts;
}
size_t ii=0;
/* use a single time for the entire sweep */
- if (0!=clock_gettime(CLOCK_REALTIME, &sweep_time)) {
+ if (0!=clock_gettime(TRP_CLOCK, &sweep_time)) {
tr_err("trps_sweep_routes: could not read realtime clock.");
sweep_time.tv_sec=0;
sweep_time.tv_nsec=0;
TRP_RC rc=TRP_ERROR;
/* use a single time for the entire sweep */
- if (0!=clock_gettime(CLOCK_REALTIME, &sweep_time)) {
+ if (0!=clock_gettime(TRP_CLOCK, &sweep_time)) {
tr_err("trps_sweep_ctable: could not read realtime clock.");
sweep_time.tv_sec=0;
sweep_time.tv_nsec=0;
/* This is the first expiration. Note this and reset the expiry time. */
tr_comm_memb_expire(memb);
trps_compute_expiry(trps, tr_comm_memb_get_interval(memb), tr_comm_memb_get_expiry(memb));
- tr_debug("trps_sweep_ctable: community membership expired, resetting expiry to %s (%.*s in %.*s, origin %.*s).",
+ tr_debug("trps_sweep_ctable: community membership expired at %s, resetting expiry to %s (%.*s in %.*s, origin %.*s).",
+ timespec_to_str(&sweep_time),
timespec_to_str(tr_comm_memb_get_expiry(memb)),
tr_comm_memb_get_realm_id(memb)->len, tr_comm_memb_get_realm_id(memb)->buf,
tr_comm_get_id(tr_comm_memb_get_comm(memb))->len, tr_comm_get_id(tr_comm_memb_get_comm(memb))->buf,