diff options
author | Florin Coras <fcoras@cisco.com> | 2018-07-22 12:59:30 -0700 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2018-07-23 20:23:58 +0000 |
commit | 8409955e4b27f9797d9e7bb1ef7064d04ff03f71 (patch) | |
tree | 7a921c69e0ac9e7aab42723e009173946c3b074c | |
parent | 6b9b41c832332e9e9876edad51917230e4e9a4af (diff) |
session: send rx events only if session ready
Change-Id: I8d631121b104fb40c20701d4c1b428f2b71e5785
Signed-off-by: Florin Coras <fcoras@cisco.com>
-rw-r--r-- | src/svm/svm_fifo.h | 6 | ||||
-rw-r--r-- | src/vnet/session/application.c | 5 | ||||
-rw-r--r-- | src/vnet/session/session_node.c | 6 |
3 files changed, 15 insertions, 2 deletions
diff --git a/src/svm/svm_fifo.h b/src/svm/svm_fifo.h index 40182901db5..40242614829 100644 --- a/src/svm/svm_fifo.h +++ b/src/svm/svm_fifo.h @@ -113,6 +113,12 @@ svm_fifo_is_full (svm_fifo_t * f) return (f->cursize == f->nitems); } +static inline int +svm_fifo_is_empty (svm_fifo_t * f) +{ + return (f->cursize == 0); +} + static inline u32 svm_fifo_max_enqueue (svm_fifo_t * f) { diff --git a/src/vnet/session/application.c b/src/vnet/session/application.c index 1dc04f0afa7..5f18bd27b2a 100644 --- a/src/vnet/session/application.c +++ b/src/vnet/session/application.c @@ -841,10 +841,11 @@ app_send_io_evt_rx (application_t * app, stream_session_t * s, u8 lock) svm_msg_q_msg_t msg; svm_msg_q_t *mq; - if (PREDICT_FALSE (s->session_state == SESSION_STATE_CLOSED)) + if (PREDICT_FALSE (s->session_state != SESSION_STATE_READY)) { /* Session is closed so app will never clean up. Flush rx fifo */ - svm_fifo_dequeue_drop_all (s->server_rx_fifo); + if (s->session_state == SESSION_STATE_CLOSED) + svm_fifo_dequeue_drop_all (s->server_rx_fifo); return 0; } diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index 1ae92edf1ea..baabb05943d 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -68,6 +68,12 @@ session_mq_accepted_reply_handler (void *data) return; } s->session_state = SESSION_STATE_READY; + if (!svm_fifo_is_empty (s->server_rx_fifo)) + { + application_t *app; + app = application_get (s->app_index); + application_send_event (app, s, FIFO_EVENT_APP_RX); + } } } |