vcl: handle reset while reading/writing data
Change-Id: I73d1dde5b78bbb7835f3a4f0d35fc0d5e46ec103 Signed-off-by: Florin Coras <fcoras@cisco.com>
This commit is contained in:
Florin Coras
committed by
Dave Barach
parent
66b48a9c61
commit
05ce4b8b79
@ -1551,15 +1551,11 @@ vppcom_session_read_internal (uint32_t session_handle, void *buf, int n,
|
||||
e = svm_msg_q_msg_data (mq, &msg);
|
||||
svm_msg_q_unlock (mq);
|
||||
if (!vcl_is_rx_evt_for_session (e, s->session_index, is_ct))
|
||||
{
|
||||
vcl_handle_mq_event (wrk, e);
|
||||
svm_msg_q_free_msg (mq, &msg);
|
||||
continue;
|
||||
}
|
||||
vcl_handle_mq_event (wrk, e);
|
||||
svm_msg_q_free_msg (mq, &msg);
|
||||
|
||||
if (PREDICT_FALSE (s->session_state == STATE_VPP_CLOSING))
|
||||
return 0;
|
||||
if (PREDICT_FALSE (s->session_state == STATE_DISCONNECT))
|
||||
return VPPCOM_ECONNRESET;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1644,15 +1640,11 @@ vppcom_session_read_segments (uint32_t session_handle,
|
||||
e = svm_msg_q_msg_data (mq, &msg);
|
||||
svm_msg_q_unlock (mq);
|
||||
if (!vcl_is_rx_evt_for_session (e, s->session_index, is_ct))
|
||||
{
|
||||
vcl_handle_mq_event (wrk, e);
|
||||
svm_msg_q_free_msg (mq, &msg);
|
||||
continue;
|
||||
}
|
||||
vcl_handle_mq_event (wrk, e);
|
||||
svm_msg_q_free_msg (mq, &msg);
|
||||
|
||||
if (PREDICT_FALSE (s->session_state == STATE_VPP_CLOSING))
|
||||
return 0;
|
||||
if (PREDICT_FALSE (s->session_state == STATE_DISCONNECT))
|
||||
return VPPCOM_ECONNRESET;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1802,12 +1794,12 @@ vppcom_session_write_inline (uint32_t session_handle, void *buf, size_t n,
|
||||
if (!vcl_is_tx_evt_for_session (e, s->session_index, is_ct))
|
||||
vcl_handle_mq_event (wrk, e);
|
||||
svm_msg_q_free_msg (mq, &msg);
|
||||
|
||||
if (PREDICT_FALSE (!(s->session_state & STATE_OPEN)))
|
||||
return VPPCOM_ECONNRESET;
|
||||
}
|
||||
}
|
||||
|
||||
if (PREDICT_FALSE (!(s->session_state & STATE_OPEN)))
|
||||
return VPPCOM_ECONNRESET;
|
||||
|
||||
ASSERT (FIFO_EVENT_APP_TX + 1 == SESSION_IO_EVT_CT_TX);
|
||||
et = FIFO_EVENT_APP_TX + vcl_session_is_ct (s);
|
||||
if (is_flush && !vcl_session_is_ct (s))
|
||||
|
Reference in New Issue
Block a user