Fix: Set a single return point and mutex unlock
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index 46413eda6e710d9e2f934df9e49336a5fd6fcef0..249df8a47bc4789ae9aedee05300e248c52e926e 100644 (file)
@@ -282,8 +282,19 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
        }
        case LTTNG_CONSUMER_DATA_AVAILABLE:
        {
-               rcu_read_unlock();
-               return -ENOSYS;
+               int32_t ret;
+               uint64_t id = msg.u.data_available.session_id;
+
+               DBG("Kernel consumer data available command for id %" PRIu64, id);
+
+               ret = consumer_data_available(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");
+               }
+               break;
        }
        default:
                goto end_nosignal;
@@ -491,7 +502,9 @@ int lttng_kconsumer_data_available(struct lttng_consumer_stream *stream)
         */
        ret = pthread_mutex_trylock(&stream->lock);
        if (ret == EBUSY) {
-               goto data_not_available;
+               /* Data not available */
+               ret = 0;
+               goto end;
        }
        /* The stream is now locked so we can do our ustctl calls */
 
@@ -500,14 +513,14 @@ int lttng_kconsumer_data_available(struct lttng_consumer_stream *stream)
                /* 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;
+               goto end_unlock;
        }
 
        /* Data is available to be read for this stream. */
-       pthread_mutex_unlock(&stream->lock);
-       return 1;
+       ret = 1;
 
-data_not_available:
-       return 0;
+end_unlock:
+       pthread_mutex_unlock(&stream->lock);
+end:
+       return ret;
 }
This page took 0.035748 seconds and 4 git commands to generate.