svm: cleanup mq private data on fifo segment cleanup 23/31823/3
authorFlorin Coras <fcoras@cisco.com>
Tue, 30 Mar 2021 07:23:54 +0000 (00:23 -0700)
committerDamjan Marion <dmarion@me.com>
Tue, 30 Mar 2021 13:17:42 +0000 (13:17 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I65373f2cd5a33381da1e51ed7ab7a8b1358cef29

src/svm/fifo_segment.c
src/svm/message_queue.c
src/svm/message_queue.h

index 986778d..00fb023 100644 (file)
@@ -814,7 +814,7 @@ fifo_segment_cleanup (fifo_segment_t *fs)
   vec_free (fs->slices);
 
   vec_foreach (fs->mqs, mq)
-    vec_free (mq->rings);
+    svm_msg_q_cleanup (mq);
 
   vec_free (fs->mqs);
 }
index e08ba06..a6af796 100644 (file)
@@ -166,11 +166,20 @@ svm_msg_q_attach (svm_msg_q_t *mq, void *smq_base)
   clib_spinlock_init (&mq->q.lock);
 }
 
+void
+svm_msg_q_cleanup (svm_msg_q_t *mq)
+{
+  vec_free (mq->rings);
+  clib_spinlock_free (&mq->q.lock);
+  if (mq->q.evtfd != -1)
+    close (mq->q.evtfd);
+}
+
 void
 svm_msg_q_free (svm_msg_q_t * mq)
 {
+  svm_msg_q_cleanup (mq);
   clib_mem_free (mq->q.shr);
-  clib_spinlock_free (&mq->q.lock);
   clib_mem_free (mq);
 }
 
index 0e402c5..bd76eda 100644 (file)
@@ -125,6 +125,11 @@ uword svm_msg_q_size_to_alloc (svm_msg_q_cfg_t *cfg);
 
 void svm_msg_q_attach (svm_msg_q_t *mq, void *smq_base);
 
+/**
+ * Cleanup mq's private data
+ */
+void svm_msg_q_cleanup (svm_msg_q_t *mq);
+
 /**
  * Free message queue
  *