+ /* *INDENT-OFF* */
+ clib_llist_foreach_safe (wrk->event_elts, evt_list, ctrl_he, elt, ({
+ clib_llist_remove (wrk->event_elts, evt_list, elt);
+ session_event_dispatch (wrk, node, elt, thread_index, &n_tx_packets);
+ }));
+ /* *INDENT-ON* */
+
+ /*
+ * Handle the new io events.
+ */
+
+ new_he = pool_elt_at_index (wrk->event_elts, wrk->new_head);
+
+ /* *INDENT-OFF* */
+ clib_llist_foreach_safe (wrk->event_elts, evt_list, new_he, elt, ({
+ session_evt_type_t et;
+
+ et = elt->evt.event_type;
+ clib_llist_remove (wrk->event_elts, evt_list, elt);
+
+ /* Postpone tx events if we can't handle them this dispatch cycle */
+ if (n_tx_packets >= VLIB_FRAME_SIZE
+ && (et == SESSION_IO_EVT_TX || et == SESSION_IO_EVT_TX_FLUSH))
+ {
+ clib_llist_add (wrk->event_elts, evt_list, elt, new_he);
+ continue;
+ }
+
+ session_event_dispatch (wrk, node, elt, thread_index, &n_tx_packets);
+ }));
+ /* *INDENT-ON* */
+
+ /*
+ * Handle the old io events
+ */
+
+ old_he = pool_elt_at_index (wrk->event_elts, wrk->old_head);
+ old_ti = clib_llist_prev_index (old_he, evt_list);
+
+ while (!clib_llist_is_empty (wrk->event_elts, evt_list, old_he))