Consumer daemon data available command support
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index 2456d3fc91936c69f074bbd038ee227c46e48220..46413eda6e710d9e2f934df9e49336a5fd6fcef0 100644 (file)
@@ -472,3 +472,42 @@ error:
        return ret;
 }
 
+/*
+ * Check if data is still being extracted from the buffers for a specific
+ * stream. Consumer data lock MUST be acquired before calling this function.
+ *
+ * Return 0 if the traced data are still getting read else 1 meaning that the
+ * data is available for trace viewer reading.
+ */
+int lttng_kconsumer_data_available(struct lttng_consumer_stream *stream)
+{
+       int ret;
+
+       assert(stream);
+
+       /*
+        * Try to lock the stream mutex. On failure, we know that the stream is
+        * being used else where hence there is data still being extracted.
+        */
+       ret = pthread_mutex_trylock(&stream->lock);
+       if (ret == EBUSY) {
+               goto data_not_available;
+       }
+       /* The stream is now locked so we can do our ustctl calls */
+
+       ret = kernctl_get_next_subbuf(stream->wait_fd);
+       if (ret == 0) {
+               /* There is still data so let's put back this subbuffer. */
+               ret = kernctl_put_subbuf(stream->wait_fd);
+               assert(ret == 0);
+               pthread_mutex_unlock(&stream->lock);
+               goto data_not_available;
+       }
+
+       /* Data is available to be read for this stream. */
+       pthread_mutex_unlock(&stream->lock);
+       return 1;
+
+data_not_available:
+       return 0;
+}
This page took 0.030771 seconds and 4 git commands to generate.