session: use msg queue for events
[vpp.git] / src / svm / queue.h
index dc1fc36..68a63d7 100644 (file)
@@ -36,6 +36,24 @@ typedef struct _svm_queue
   char data[0];
 } svm_queue_t;
 
+typedef enum
+{
+  /**
+   * blocking call
+   */
+  SVM_Q_WAIT = 0,
+
+  /**
+   * non-blocking call
+   */
+  SVM_Q_NOWAIT,
+
+  /**
+   * blocking call, return on signal or time-out
+   */
+  SVM_Q_TIMEDWAIT,
+} svm_q_conditional_wait_t;
+
 svm_queue_t *svm_queue_init (int nels,
                             int elsize,
                             int consumer_pid,
@@ -43,14 +61,21 @@ svm_queue_t *svm_queue_init (int nels,
 void svm_queue_free (svm_queue_t * q);
 int svm_queue_add (svm_queue_t * q, u8 * elem, int nowait);
 int svm_queue_add2 (svm_queue_t * q, u8 * elem, u8 * elem2, int nowait);
-int svm_queue_sub (svm_queue_t * q, u8 * elem, int nowait);
+int svm_queue_sub (svm_queue_t * q, u8 * elem, svm_q_conditional_wait_t cond,
+                  u32 time);
 int svm_queue_sub2 (svm_queue_t * q, u8 * elem);
 void svm_queue_lock (svm_queue_t * q);
 void svm_queue_unlock (svm_queue_t * q);
 int svm_queue_is_full (svm_queue_t * q);
 int svm_queue_add_nolock (svm_queue_t * q, u8 * elem);
 int svm_queue_sub_raw (svm_queue_t * q, u8 * elem);
-int svm_queue_add_raw (svm_queue_t * q, u8 * elem);
+
+/**
+ * Add element to queue with mutex held
+ * @param q            queue
+ * @param elem         pointer element data to add
+ */
+void svm_queue_add_raw (svm_queue_t * q, u8 * elem);
 
 /*
  * DEPRECATED please use svm_queue_t instead