SCTP: missing spinlock init when multiple threads 22/10422/4
authorMarco Varlese <marco.varlese@suse.com>
Tue, 6 Feb 2018 08:01:39 +0000 (09:01 +0100)
committerDamjan Marion <dmarion.lists@gmail.com>
Tue, 6 Feb 2018 12:33:32 +0000 (12:33 +0000)
When the number of threads results being more than 1, the spinlock
structure requires to be initialized otherwise subsequent calls to
the "lock" API (clib_spinlock_lock_if_init) would result in a void
operation.

Change-Id: Ia268c4687252e41962bb3f1217f0a849d8c40385
Signed-off-by: Marco Varlese <marco.varlese@suse.com>
src/vnet/sctp/sctp.c

index bd62c32..f8cd21c 100644 (file)
@@ -598,7 +598,7 @@ format_sctp_listener_session (u8 * s, va_list * args)
 }
 
 void
-sctp_timer_init_handler (u32 conn_index, u32 timer_id)
+sctp_expired_timers_cb (u32 conn_index, u32 timer_id)
 {
   sctp_connection_t *sctp_conn;
 
@@ -629,7 +629,7 @@ sctp_timer_init_handler (u32 conn_index, u32 timer_id)
 /* *INDENT OFF* */
 static sctp_timer_expiration_handler
   * sctp_timer_expiration_handlers[SCTP_N_TIMERS] = {
-  sctp_timer_init_handler
+  sctp_expired_timers_cb
 };
 
 /* *INDENT ON* */
@@ -646,6 +646,8 @@ sctp_expired_timers_dispatch (u32 * expired_timers)
       connection_index = expired_timers[i] & 0x0FFFFFFF;
       timer_id = expired_timers[i] >> 28;
 
+      SCTP_DBG ("Expired timer ID: %u", timer_id);
+
       /* Handle expiration */
       (*sctp_timer_expiration_handlers[timer_id]) (connection_index,
                                                   timer_id);
@@ -734,6 +736,7 @@ sctp_main_enable (vlib_main_t * vm)
 
   if (num_threads > 1)
     {
+      clib_spinlock_init (&tm->half_open_lock);
     }
 
   vec_validate (tm->tx_frames[0], num_threads - 1);