+static void
+vcl_epoll_lt_add (vcl_worker_t *wrk, vcl_session_t *s)
+{
+ vcl_session_t *cur, *prev;
+
+ ASSERT (s->vep.lt_next == VCL_INVALID_SESSION_INDEX);
+
+ if (wrk->ep_lt_current == VCL_INVALID_SESSION_INDEX)
+ {
+ wrk->ep_lt_current = s->session_index;
+ s->vep.lt_next = s->session_index;
+ s->vep.lt_prev = s->session_index;
+ return;
+ }
+
+ cur = vcl_session_get (wrk, wrk->ep_lt_current);
+ prev = vcl_session_get (wrk, cur->vep.lt_prev);
+
+ prev->vep.lt_next = s->session_index;
+ s->vep.lt_prev = prev->session_index;
+
+ s->vep.lt_next = cur->session_index;
+ cur->vep.lt_prev = s->session_index;
+}
+
+static void
+vcl_epoll_lt_del (vcl_worker_t *wrk, vcl_session_t *s)
+{
+ vcl_session_t *prev, *next;
+
+ ASSERT (s->vep.lt_next != VCL_INVALID_SESSION_INDEX);
+
+ if (s->vep.lt_next == s->session_index)
+ {
+ wrk->ep_lt_current = VCL_INVALID_SESSION_INDEX;
+ s->vep.lt_next = VCL_INVALID_SESSION_INDEX;
+ s->vep.lt_prev = VCL_INVALID_SESSION_INDEX;
+ return;
+ }
+
+ prev = vcl_session_get (wrk, s->vep.lt_prev);
+ next = vcl_session_get (wrk, s->vep.lt_next);
+
+ prev->vep.lt_next = next->session_index;
+ next->vep.lt_prev = prev->session_index;
+
+ if (s->session_index == wrk->ep_lt_current)
+ wrk->ep_lt_current = s->vep.lt_next;
+
+ s->vep.lt_next = VCL_INVALID_SESSION_INDEX;
+ s->vep.lt_prev = VCL_INVALID_SESSION_INDEX;
+}
+
+int
+vcl_session_cleanup (vcl_worker_t * wrk, vcl_session_t * s,
+ vcl_session_handle_t sh, u8 do_disconnect)