X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fhs_apps%2Fproxy.c;h=d0e3bc49b4268f92eb1c0b3413436fb2e444de49;hb=f22f4e562e1b922cff036ef628b77fd2d479d015;hp=ad5b292c56d386b501ace4f7c3d2e80f5fd4b2c6;hpb=dda2dbedab8d7fda3b90f9340a20eafdc865b04b;p=vpp.git diff --git a/src/plugins/hs_apps/proxy.c b/src/plugins/hs_apps/proxy.c index ad5b292c56d..d0e3bc49b42 100644 --- a/src/plugins/hs_apps/proxy.c +++ b/src/plugins/hs_apps/proxy.c @@ -271,8 +271,16 @@ proxy_tx_callback (session_t * proxy_s) session_handle_t handle; proxy_session_t *ps; session_t *ao_s; + u32 min_free; uword *p; + min_free = clib_min (svm_fifo_size (proxy_s->tx_fifo) >> 3, 128 << 10); + if (svm_fifo_max_enqueue (proxy_s->tx_fifo) < min_free) + { + svm_fifo_add_want_deq_ntf (proxy_s->tx_fifo, SVM_FIFO_WANT_DEQ_NOTIF); + return 0; + } + clib_spinlock_lock_if_init (&pm->sessions_lock); handle = session_handle (proxy_s); @@ -348,6 +356,9 @@ active_open_connected_callback (u32 app_index, u32 opaque, s->tx_fifo->refcnt++; s->rx_fifo->refcnt++; + svm_fifo_init_ooo_lookup (s->tx_fifo, 1 /* deq ooo */ ); + svm_fifo_init_ooo_lookup (s->rx_fifo, 0 /* enq ooo */ ); + hash_set (pm->proxy_session_by_active_open_handle, ps->vpp_active_open_handle, opaque); @@ -414,8 +425,16 @@ active_open_tx_callback (session_t * ao_s) session_handle_t handle; proxy_session_t *ps; session_t *proxy_s; + u32 min_free; uword *p; + min_free = clib_min (svm_fifo_size (ao_s->tx_fifo) >> 3, 128 << 10); + if (svm_fifo_max_enqueue (ao_s->tx_fifo) < min_free) + { + svm_fifo_add_want_deq_ntf (ao_s->tx_fifo, SVM_FIFO_WANT_DEQ_NOTIF); + return 0; + } + clib_spinlock_lock_if_init (&pm->sessions_lock); handle = session_handle (ao_s);