Update session timer

This commit is contained in:
luwenpeng
2024-03-29 19:44:20 +08:00
parent 8e527a0f4c
commit 772860c1be
15 changed files with 151 additions and 211 deletions

View File

@@ -6,7 +6,7 @@ struct session_timer
struct timeouts *timeouts;
};
struct session_timer *session_timer_new()
struct session_timer *session_timer_new(uint64_t now)
{
timeout_error_t err;
struct session_timer *timer = (struct session_timer *)calloc(1, sizeof(struct session_timer));
@@ -20,6 +20,7 @@ struct session_timer *session_timer_new()
{
goto error;
}
timeouts_update(timer->timeouts, now);
return timer;
@@ -42,21 +43,26 @@ void session_timer_free(struct session_timer *timer)
}
}
void session_timer_add(struct session_timer *timer, struct session *sess)
void session_timer_add(struct session_timer *timer, struct session *sess, uint64_t expires)
{
struct timeout *timeout = &sess->timeout;
timeouts_add(timer->timeouts, timeout, sess->expire_abs_ts);
timeout_init(&sess->timeout, TIMEOUT_ABS);
timeouts_add(timer->timeouts, &sess->timeout, expires);
}
void session_timer_del(struct session_timer *timer, struct session *sess)
{
struct timeout *timeout = &sess->timeout;
timeouts_del(timer->timeouts, timeout);
timeouts_del(timer->timeouts, &sess->timeout);
}
struct session *session_timer_expire(struct session_timer *timer, uint64_t abs_current_ts)
void session_timer_update(struct session_timer *timer, struct session *sess, uint64_t expires)
{
timeouts_update(timer->timeouts, abs_current_ts);
session_timer_del(timer, sess);
session_timer_add(timer, sess, expires);
}
struct session *session_timer_expire(struct session_timer *timer, uint64_t now)
{
timeouts_update(timer->timeouts, now);
struct timeout *timeout = timeouts_get(timer->timeouts);
if (timeout == NULL)
@@ -64,8 +70,7 @@ struct session *session_timer_expire(struct session_timer *timer, uint64_t abs_c
return NULL;
}
struct session *sess = (struct session *)timeout->callback.arg;
return sess;
return container_of(timeout, struct session, timeout);
}
uint64_t session_timer_next_expire_interval(struct session_timer *timer)