}
sm_index = segment_manager_index (sm);
- ls->rx_fifo->master_session_index = ls->session_index;
- ls->tx_fifo->master_session_index = ls->session_index;
+ ls->rx_fifo->shr->master_session_index = ls->session_index;
+ ls->tx_fifo->shr->master_session_index = ls->session_index;
ls->rx_fifo->master_thread_index = ls->thread_index;
ls->tx_fifo->master_thread_index = ls->thread_index;
ls->rx_fifo->segment_manager = sm_index;
ls->rx_fifo->segment_index = seg_index;
ls->tx_fifo->segment_index = seg_index;
- /* Disable ooo lookups on the cut-through fifos. TODO remove once init of
- * chunk lookup rbtrees is delegated to transports */
- svm_fifo_free_chunk_lookup (ls->tx_fifo);
-
segment_handle = segment_manager_segment_handle (sm, seg);
if ((rv = app_worker_add_segment_notify (server_wrk, segment_handle)))
{
session_t *s = (session_t *) session;
if (session_has_transport (s))
return 0;
- /* If event enqueued towards peer, remove from scheduler and
- * remove session tx flag, i.e., accept new tx events */
+ /* If event enqueued towards peer, remove from scheduler and remove
+ * session tx flag, i.e., accept new tx events. Unset fifo flag now to
+ * avoid missing events if peer did not clear fifo flag yet, which is
+ * interpreted as successful notification and session is descheduled. */
+ svm_fifo_unset_event (s->tx_fifo);
if (!ct_session_tx (s))
- {
- sp->flags = TRANSPORT_SND_F_DESCHED;
- svm_fifo_unset_event (s->tx_fifo);
- }
+ sp->flags = TRANSPORT_SND_F_DESCHED;
+
/* The scheduler uses packet count as a means of upper bounding the amount
* of work done per dispatch. So make it look like we have sent something */
return 1;