X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fkernel-consumer%2Fkernel-consumer.c;h=249df8a47bc4789ae9aedee05300e248c52e926e;hb=ab1027f48fa7e2dd29b3c85548ec42f26d06be25;hp=46413eda6e710d9e2f934df9e49336a5fd6fcef0;hpb=ca22feea083301934d1c8511851c86fb008c0697;p=lttng-tools.git diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c index 46413eda6..249df8a47 100644 --- a/src/common/kernel-consumer/kernel-consumer.c +++ b/src/common/kernel-consumer/kernel-consumer.c @@ -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; }