Remove MSG_WAITALL on every recvmsg() socket type
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index 249df8a47bc4789ae9aedee05300e248c52e926e..0b0592adb8a3bbe008141a4cb92196e020b752c8 100644 (file)
@@ -280,19 +280,19 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
 
                goto end_nosignal;
        }
-       case LTTNG_CONSUMER_DATA_AVAILABLE:
+       case LTTNG_CONSUMER_DATA_PENDING:
        {
                int32_t ret;
-               uint64_t id = msg.u.data_available.session_id;
+               uint64_t id = msg.u.data_pending.session_id;
 
-               DBG("Kernel consumer data available command for id %" PRIu64, id);
+               DBG("Kernel consumer data pending command for id %" PRIu64, id);
 
-               ret = consumer_data_available(id);
+               ret = consumer_data_pending(id);
 
                /* Send back returned value to session daemon */
                ret = lttcomm_send_unix_sock(sock, &ret, sizeof(ret));
                if (ret < 0) {
-                       PERROR("send data available ret code");
+                       PERROR("send data pending ret code");
                }
                break;
        }
@@ -485,42 +485,30 @@ 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
+ * Return 1 if the traced data are still getting read else 0 meaning that the
  * data is available for trace viewer reading.
  */
-int lttng_kconsumer_data_available(struct lttng_consumer_stream *stream)
+int lttng_kconsumer_data_pending(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) {
-               /* Data not available */
-               ret = 0;
-               goto end;
-       }
-       /* 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);
-               goto end_unlock;
+               ret = 1;   /* Data is pending */
+               goto end;
        }
 
-       /* Data is available to be read for this stream. */
-       ret = 1;
+       /* Data is NOT pending and ready to be read. */
+       ret = 0;
 
-end_unlock:
-       pthread_mutex_unlock(&stream->lock);
 end:
        return ret;
 }
This page took 0.024633 seconds and 4 git commands to generate.