session: memory leaks on various transports when session disable and enable

When toggling session disable and enable, memory leaks found on various
transports.

Don't create the timer wheels on enable when they are already creaded.
Don't create the spin locks when they are already created.
Add session enable disable test in session unit test.

Type: fix

Change-Id: I08988a96bbf2d67a67c743b50b63f5b1e27402a3
Signed-off-by: Steven Luong <sluong@cisco.com>
diff --git a/src/vnet/session/application_local.c b/src/vnet/session/application_local.c
index 3cb743d..064dd6f 100644
--- a/src/vnet/session/application_local.c
+++ b/src/vnet/session/application_local.c
@@ -1350,13 +1350,21 @@
   ct_main_t *cm = &ct_main;
   ct_worker_t *wrk;
 
+  if (is_en == 0)
+    return 0;
+
   cm->n_workers = vlib_num_workers ();
   cm->fwrk_thread = transport_cl_thread ();
   vec_validate (cm->wrk, vtm->n_vlib_mains);
   vec_foreach (wrk, cm->wrk)
-    clib_spinlock_init (&wrk->pending_connects_lock);
-  clib_spinlock_init (&cm->ho_reuseable_lock);
-  clib_rwlock_init (&cm->app_segs_lock);
+    {
+      if (wrk->pending_connects_lock == 0)
+	clib_spinlock_init (&wrk->pending_connects_lock);
+    }
+  if (cm->ho_reuseable_lock == 0)
+    clib_spinlock_init (&cm->ho_reuseable_lock);
+  if (cm->app_segs_lock == 0)
+    clib_rwlock_init (&cm->app_segs_lock);
   vec_validate (cm->fwrk_pending_connects, cm->n_workers);
   return 0;
 }