diff options
author | Florin Coras <fcoras@cisco.com> | 2019-08-28 17:12:32 -0700 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2019-09-27 09:36:42 +0000 |
commit | 154e4a6cb75df40093540e60ecea8352ca00e479 (patch) | |
tree | 21a37c1ab02e70ebb14673cf5ba767746e06d48c /src | |
parent | 997f95e11a23c7d90a1d29464841a7ad6a413a6c (diff) |
svm: fix fifo hdr freelist allocation
Type: fix
Change-Id: Ia362ad821db1fd506e973e1844cc3ec74703cc17
Signed-off-by: Florin Coras <fcoras@cisco.com>
(cherry picked from commit 73cad33b56ffc08943e9c0d73ecb14466558baae)
Diffstat (limited to 'src')
-rw-r--r-- | src/svm/fifo_segment.c | 4 | ||||
-rw-r--r-- | src/svm/svm_fifo.c | 2 | ||||
-rw-r--r-- | src/vnet/session/session.c | 2 |
3 files changed, 7 insertions, 1 deletions
diff --git a/src/svm/fifo_segment.c b/src/svm/fifo_segment.c index eeb274636c1..dab97a55209 100644 --- a/src/svm/fifo_segment.c +++ b/src/svm/fifo_segment.c @@ -233,6 +233,10 @@ fs_try_alloc_fifo_freelist_multi_chunk (fifo_segment_t * fs, u32 data_bytes) return 0; memset (f, 0, sizeof (*f)); } + else + { + fsh->free_fifos = f->next; + } fl_index = fs_freelist_for_size (data_bytes) - 1; vec_validate_init_empty (fsh->free_chunks, fl_index, 0); diff --git a/src/svm/svm_fifo.c b/src/svm/svm_fifo.c index b6f0df7d88d..6bd6f9157bc 100644 --- a/src/svm/svm_fifo.c +++ b/src/svm/svm_fifo.c @@ -400,7 +400,7 @@ svm_fifo_init (svm_fifo_t * f, u32 size) f->ooos_list_head = OOO_SEGMENT_INVALID_INDEX; f->segment_index = SVM_FIFO_INVALID_INDEX; f->refcnt = 1; - f->flags = 0; + f->head = f->tail = f->flags = 0; f->head_chunk = f->tail_chunk = f->ooo_enq = f->ooo_deq = f->start_chunk; } diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index 45292454e57..c0452cad1bd 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -63,6 +63,7 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index, break; case SESSION_IO_EVT_BUILTIN_TX: case SESSION_CTRL_EVT_CLOSE: + case SESSION_CTRL_EVT_RESET: evt->session_handle = session_handle ((session_t *) data); break; default: @@ -125,6 +126,7 @@ session_add_self_custom_tx_evt (transport_connection_t * tc, u8 has_prio) s = session_get (tc->s_index, tc->thread_index); ASSERT (s->thread_index == vlib_get_thread_index ()); + ASSERT (s->session_state < SESSION_STATE_TRANSPORT_DELETED); if (!(s->flags & SESSION_F_CUSTOM_TX)) { s->flags |= SESSION_F_CUSTOM_TX; |