Fix: Synchronization issue for data available command
[lttng-tools.git] / src / common / ust-consumer / ust-consumer.c
index c2ad0fdd8cef613f170f4c43673d5d356fde8f93..4d3671a34bbcbe027ae9520f44aca94a51b92af0 100644 (file)
@@ -526,7 +526,8 @@ error:
 
 /*
  * Check if data is still being extracted from the buffers for a specific
- * stream. Consumer data lock MUST be acquired before calling this function.
+ * stream. Consumer data lock MUST be acquired before calling this function
+ * and the stream lock.
  *
  * Return 0 if the traced data are still getting read else 1 meaning that the
  * data is available for trace viewer reading.
@@ -539,29 +540,17 @@ int lttng_ustconsumer_data_available(struct lttng_consumer_stream *stream)
 
        DBG("UST consumer checking data availability");
 
-       /*
-        * 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 = ustctl_get_next_subbuf(stream->chan->handle, stream->buf);
        if (ret == 0) {
                /* There is still data so let's put back this subbuffer. */
                ret = ustctl_put_subbuf(stream->chan->handle, stream->buf);
                assert(ret == 0);
-               pthread_mutex_unlock(&stream->lock);
-               goto data_not_available;
+               goto end;
        }
 
        /* Data is available to be read for this stream. */
-       pthread_mutex_unlock(&stream->lock);
-       return 1;
+       ret = 1;
 
-data_not_available:
-       return 0;
+end:
+       return ret;
 }
This page took 0.023513 seconds and 4 git commands to generate.