vcl: handle old events before blocking in epoll 54/15054/2
authorFlorin Coras <fcoras@cisco.com>
Fri, 28 Sep 2018 21:59:37 +0000 (14:59 -0700)
committerDamjan Marion <dmarion@me.com>
Sat, 29 Sep 2018 07:17:02 +0000 (07:17 +0000)
Change-Id: I3e62c787882d93c3bfb398ed0d04ef56b3a60b2b
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vcl/vcl_test_server.c
src/vcl/vppcom.c

index a184d99..2913452 100644 (file)
@@ -112,8 +112,9 @@ conn_pool_expand (vcl_test_server_worker_t * wrk, size_t expand_size)
 static inline vcl_test_server_conn_t *
 conn_pool_alloc (vcl_test_server_worker_t * wrk)
 {
-  int i;
+  int i, expand = 0;
 
+again:
   for (i = 0; i < wrk->conn_pool_size; i++)
     {
       if (!wrk->conn_pool[i].is_alloc)
@@ -124,6 +125,13 @@ conn_pool_alloc (vcl_test_server_worker_t * wrk)
        }
     }
 
+  if (expand == 0)
+    {
+      conn_pool_expand (wrk, 2 * wrk->conn_pool_size);
+      expand = 1;
+      goto again;
+    }
+  vtwrn ("Failed to allocate connection even after expand");
   return 0;
 }
 
@@ -530,7 +538,7 @@ vts_conn_expect_config (vcl_test_server_conn_t * conn)
     return 1;
 
   return (conn->stats.rx_bytes < 128
-         || conn->stats.rx_bytes > conn->cfg.total_bytes);
+         || conn->stats.rx_bytes >= conn->cfg.total_bytes);
 }
 
 static sock_test_cfg_t *
index 7274749..5423bb6 100644 (file)
@@ -2421,6 +2421,9 @@ vcl_epoll_wait_handle_mq (vcl_worker_t * wrk, svm_msg_q_t * mq,
   session_event_t *e;
   int i;
 
+  if (vec_len (wrk->mq_msg_vector) && svm_msg_q_is_empty (mq))
+    goto handle_dequeued;
+
   svm_msg_q_lock (mq);
   if (svm_msg_q_is_empty (mq))
     {
@@ -2445,6 +2448,7 @@ vcl_epoll_wait_handle_mq (vcl_worker_t * wrk, svm_msg_q_t * mq,
   vcl_mq_dequeue_batch (wrk, mq);
   svm_msg_q_unlock (mq);
 
+handle_dequeued:
   for (i = 0; i < vec_len (wrk->mq_msg_vector); i++)
     {
       msg = vec_elt_at_index (wrk->mq_msg_vector, i);
@@ -2457,7 +2461,6 @@ vcl_epoll_wait_handle_mq (vcl_worker_t * wrk, svm_msg_q_t * mq,
          break;
        }
     }
-
   vec_delete (wrk->mq_msg_vector, i, 0);
 
   return *num_ev;