diff mbox series

[ovs-dev,2/3] performance: Add API for waiting until samples have been processed

Message ID 20180228141715.23882-3-jkbs@redhat.com
State Changes Requested
Headers show
Series [ovs-dev,1/3] performance: Add API for retrieving calculated statistics | expand

Commit Message

Jakub Sitnicki Feb. 28, 2018, 2:17 p.m. UTC
Will be used for testing the module.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
---
 lib/performance.c | 18 ++++++++++++++++++
 lib/performance.h |  3 +++
 2 files changed, 21 insertions(+)
diff mbox series

Patch

diff --git a/lib/performance.c b/lib/performance.c
index 8af124d1d..0239c78ee 100644
--- a/lib/performance.c
+++ b/lib/performance.c
@@ -64,6 +64,7 @@  struct performance {
 enum performance_op {
     OP_START_SAMPLE,
     OP_END_SAMPLE,
+    OP_SYNC,
     OP_RESET,
     OP_SHUTDOWN,
 };
@@ -76,6 +77,7 @@  struct performance_packet {
 
 static struct shash performances = SHASH_INITIALIZER(&performances);
 static struct ovs_mutex performances_lock = OVS_MUTEX_INITIALIZER;
+static pthread_cond_t performances_sync = PTHREAD_COND_INITIALIZER;
 
 static int performance_pipe[2];
 static pthread_t performance_thread_id;
@@ -406,6 +408,9 @@  performance_thread(void *ign OVS_UNUSED)
             case OP_END_SAMPLE:
                 performance_end_sample_protected(&pkt);
                 break;
+            case OP_SYNC:
+                xpthread_cond_signal(&performances_sync);
+                break;
             case OP_RESET:
                 performance_reset_protected(&pkt);
                 break;
@@ -512,3 +517,16 @@  performance_end_sample(const char *name, unsigned long long ts)
 
     return true;
 }
+
+void
+performance_sync(void)
+{
+    struct performance_packet pkt = {
+        .op = OP_SYNC,
+    };
+
+    ovs_mutex_lock(&performances_lock);
+    write(performance_pipe[1], &pkt, sizeof(pkt));
+    ovs_mutex_cond_wait(&performances_sync, &performances_lock);
+    ovs_mutex_unlock(&performances_lock);
+}
diff --git a/lib/performance.h b/lib/performance.h
index 09ca844b9..995c975ac 100644
--- a/lib/performance.h
+++ b/lib/performance.h
@@ -52,4 +52,7 @@  bool performance_end_sample(const char *name, unsigned long long ts);
 /* Retrieve statistics calculated from collected samples */
 bool performance_get_stats(const char *name, struct performance_stats *stats);
 
+/* Block until all enqueued samples have been processed. */
+void performance_sync(void);
+
 #endif /* performance.h */