session: fix msg freeing on error 56/22056/5
authorNathan Skrzypczak <nathan.skrzypczak@gmail.com>
Fri, 13 Sep 2019 15:14:57 +0000 (17:14 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Fri, 20 Sep 2019 20:01:02 +0000 (20:01 +0000)
Type: fix

Change-Id: I0807f84737d5e98e69e9ed27a1de6813b2ddd138
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
src/plugins/hs_apps/sapi/vpp_echo_common.c
src/svm/message_queue.c
src/vnet/session/application_interface.h
src/vnet/session/session.c

index 03ed278..d6ee644 100644 (file)
@@ -469,12 +469,6 @@ echo_send_rpc (echo_main_t * em, void *fp, void *arg, u32 opaque)
       return -2;
     }
   msg = svm_msg_q_alloc_msg_w_ring (em->rpc_msq_queue, 0);
-  if (PREDICT_FALSE (svm_msg_q_msg_is_invalid (&msg)))
-    {
-      ECHO_LOG (1, "RPC msg is invalid");
-      svm_msg_q_unlock (em->rpc_msq_queue);
-      return -2;
-    }
   evt = (echo_rpc_msg_t *) svm_msg_q_msg_data (em->rpc_msq_queue, &msg);
   evt->arg = arg;
   evt->opaque = opaque;
index a40c4a4..6113450 100644 (file)
@@ -127,11 +127,6 @@ svm_msg_q_lock_and_alloc_msg_w_ring (svm_msg_q_t * mq, u32 ring_index,
          return -2;
        }
       *msg = svm_msg_q_alloc_msg_w_ring (mq, ring_index);
-      if (PREDICT_FALSE (svm_msg_q_msg_is_invalid (msg)))
-       {
-         svm_msg_q_unlock (mq);
-         return -2;
-       }
     }
   else
     {
index f5f684e..637a055 100644 (file)
@@ -486,11 +486,6 @@ app_send_io_evt_to_vpp (svm_msg_q_t * mq, u32 session_index, u8 evt_type,
          return -2;
        }
       msg = svm_msg_q_alloc_msg_w_ring (mq, SESSION_MQ_IO_EVT_RING);
-      if (PREDICT_FALSE (svm_msg_q_msg_is_invalid (&msg)))
-       {
-         svm_msg_q_unlock (mq);
-         return -2;
-       }
       evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg);
       evt->session_index = session_index;
       evt->event_type = evt_type;
index 382db8b..f14e83f 100644 (file)
@@ -41,17 +41,11 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index,
       svm_msg_q_unlock (mq);
       return -2;
     }
-  msg = svm_msg_q_alloc_msg_w_ring (mq, SESSION_MQ_IO_EVT_RING);
-  if (PREDICT_FALSE (svm_msg_q_msg_is_invalid (&msg)))
-    {
-      svm_msg_q_unlock (mq);
-      return -2;
-    }
-  evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg);
-  evt->event_type = evt_type;
   switch (evt_type)
     {
     case SESSION_CTRL_EVT_RPC:
+      msg = svm_msg_q_alloc_msg_w_ring (mq, SESSION_MQ_IO_EVT_RING);
+      evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg);
       evt->rpc_args.fp = data;
       evt->rpc_args.arg = args;
       break;
@@ -59,11 +53,15 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index,
     case SESSION_IO_EVT_TX:
     case SESSION_IO_EVT_TX_FLUSH:
     case SESSION_IO_EVT_BUILTIN_RX:
+      msg = svm_msg_q_alloc_msg_w_ring (mq, SESSION_MQ_IO_EVT_RING);
+      evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg);
       evt->session_index = *(u32 *) data;
       break;
     case SESSION_IO_EVT_BUILTIN_TX:
     case SESSION_CTRL_EVT_CLOSE:
     case SESSION_CTRL_EVT_RESET:
+      msg = svm_msg_q_alloc_msg_w_ring (mq, SESSION_MQ_IO_EVT_RING);
+      evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg);
       evt->session_handle = session_handle ((session_t *) data);
       break;
     default:
@@ -71,6 +69,7 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index,
       svm_msg_q_unlock (mq);
       return -1;
     }
+  evt->event_type = evt_type;
 
   svm_msg_q_add_and_unlock (mq, &msg);
   return 0;