session: lookup/rules table improvements and cleanup
[vpp.git] / src / vnet / session / session.c
index 5893b65..d995eeb 100644 (file)
@@ -147,7 +147,6 @@ session_alloc_for_connection (transport_connection_t * tc)
   s = session_alloc (thread_index);
   s->session_type = session_type_from_proto_and_ip (tc->proto, tc->is_ip4);
   s->session_state = SESSION_STATE_CONNECTING;
-  s->thread_index = thread_index;
 
   /* Attach transport to session and vice versa */
   s->connection_index = tc->c_index;
@@ -166,6 +165,7 @@ session_alloc_and_init (segment_manager_t * sm, transport_connection_t * tc,
   if (alloc_fifos && (rv = session_alloc_fifos (sm, s)))
     {
       session_free (s);
+      *ret_s = 0;
       return rv;
     }
 
@@ -581,7 +581,7 @@ session_stream_connect_notify (transport_connection_t * tc, u8 is_fail)
   if (!is_fail)
     {
       sm = application_get_connect_segment_manager (app);
-      alloc_fifos = application_is_proxy (app);
+      alloc_fifos = !application_is_builtin_proxy (app);
       if (session_alloc_and_init (sm, tc, alloc_fifos, &new_s))
        {
          is_fail = 1;
@@ -1008,7 +1008,7 @@ session_type_from_proto_and_ip (transport_proto_t proto, u8 is_ip4)
 transport_connection_t *
 session_get_transport (stream_session_t * s)
 {
-  if (s->session_state >= SESSION_STATE_READY)
+  if (s->session_state != SESSION_STATE_LISTENING)
     return tp_vfts[s->session_type].get_connection (s->connection_index,
                                                    s->thread_index);
   return 0;
@@ -1084,6 +1084,11 @@ session_manager_main_enable (vlib_main_t * vm)
       _vec_len (smm->pending_event_vector[i]) = 0;
       vec_validate (smm->pending_disconnects[i], 0);
       _vec_len (smm->pending_disconnects[i]) = 0;
+      if (num_threads > 1)
+       {
+         clib_spinlock_init (&smm->peekers_readers_locks[i]);
+         clib_spinlock_init (&smm->peekers_write_locks[i]);
+       }
     }
 
 #if SESSION_DBG