#include <unistd.h>
#include <sys/mman.h>
+#include <lttng/lttng-kconsumerd.h>
+
#include "lttngerr.h"
#include "kernelctl.h"
-#include "lttkconsumerd.h"
+#include "ltt-kconsumerd.h"
+#include "lttng-sessiond-comm.h"
/* the two threads (receive fd and poll) */
-pthread_t threads[2];
+static pthread_t threads[2];
/* to count the number of time the user pressed ctrl+c */
static int sigintcount = 0;
int opt_verbose;
static int opt_daemon;
static const char *progname;
-char command_sock_path[PATH_MAX]; /* Global command socket path */
-char error_sock_path[PATH_MAX]; /* Global error path */
+static char command_sock_path[PATH_MAX]; /* Global command socket path */
+static char error_sock_path[PATH_MAX]; /* Global error path */
-/* the liblttkconsumerd context */
-struct kconsumerd_local_data *ctx;
+/* the liblttngkconsumerd context */
+static struct lttng_kconsumerd_local_data *ctx;
/*
- * sighandler
- *
- * Signal handler for the daemon
+ * Signal handler for the daemon
*/
static void sighandler(int sig)
{
return;
}
- kconsumerd_should_exit(ctx);
+ lttng_kconsumerd_should_exit(ctx);
}
/*
- * set_signal_handler
- *
- * Setup signal handler for :
+ * Setup signal handler for :
* SIGINT, SIGTERM, SIGPIPE
*/
static int set_signal_handler(void)
}
/*
- * read_subbuffer
- *
- * Consume data on a file descriptor and write it on a trace file
+ * Consume data on a file descriptor and write it on a trace file.
*/
-static int read_subbuffer(struct kconsumerd_fd *kconsumerd_fd)
+static int read_subbuffer(struct lttng_kconsumerd_fd *kconsumerd_fd)
{
unsigned long len;
int err;
err = kernctl_get_next_subbuf(infd);
if (err != 0) {
ret = errno;
- perror("Reserving sub buffer failed (everything is normal, "
+ /*
+ * This is a debug message even for single-threaded consumer,
+ * because poll() have more relaxed criterions than get subbuf,
+ * so get_subbuf may fail for short race windows where poll()
+ * would issue wakeups.
+ */
+ DBG("Reserving sub buffer failed (everything is normal, "
"it is due to concurrency)");
goto end;
}
- switch (DEFAULT_KERNEL_CHANNEL_OUTPUT) {
+ switch (kconsumerd_fd->output) {
case LTTNG_EVENT_SPLICE:
/* read the whole subbuffer */
err = kernctl_get_padded_subbuf_size(infd, &len);
}
/* splice the subbuffer to the tracefile */
- ret = kconsumerd_on_read_subbuffer_splice(ctx, kconsumerd_fd, len);
+ ret = lttng_kconsumerd_on_read_subbuffer_splice(ctx, kconsumerd_fd, len);
if (ret < 0) {
/*
* display the error but continue processing to try
break;
case LTTNG_EVENT_MMAP:
/* read the used subbuffer size */
- err = kernctl_get_subbuf_size(infd, &len);
+ err = kernctl_get_padded_subbuf_size(infd, &len);
if (err != 0) {
ret = errno;
perror("Getting sub-buffer len failed.");
goto end;
}
/* write the subbuffer to the tracefile */
- ret = kconsumerd_on_read_subbuffer_mmap(ctx, kconsumerd_fd, len);
+ ret = lttng_kconsumerd_on_read_subbuffer_mmap(ctx, kconsumerd_fd, len);
if (ret < 0) {
/*
* display the error but continue processing to try
KCONSUMERD_CMD_SOCK_PATH);
}
/* create the pipe to wake to receiving thread when needed */
- ctx = kconsumerd_create(read_subbuffer);
+ ctx = lttng_kconsumerd_create(read_subbuffer);
if (ctx == NULL) {
goto error;
}
- kconsumerd_set_command_socket_path(ctx, command_sock_path);
+ lttng_kconsumerd_set_command_sock_path(ctx, command_sock_path);
if (strlen(error_sock_path) == 0) {
snprintf(error_sock_path, PATH_MAX,
KCONSUMERD_ERR_SOCK_PATH);
if (ret < 0) {
WARN("Cannot connect to error socket, is ltt-sessiond started ?");
}
- kconsumerd_set_error_socket(ctx, ret);
+ lttng_kconsumerd_set_error_sock(ctx, ret);
/* Create the thread to manage the receive of fd */
- ret = pthread_create(&threads[0], NULL, kconsumerd_thread_receive_fds,
+ ret = pthread_create(&threads[0], NULL, lttng_kconsumerd_thread_receive_fds,
(void *) ctx);
if (ret != 0) {
perror("pthread_create");
}
/* Create thread to manage the polling/writing of traces */
- ret = pthread_create(&threads[1], NULL, kconsumerd_thread_poll_fds,
+ ret = pthread_create(&threads[1], NULL, lttng_kconsumerd_thread_poll_fds,
(void *) ctx);
if (ret != 0) {
perror("pthread_create");
}
}
ret = EXIT_SUCCESS;
- kconsumerd_send_error(ctx, KCONSUMERD_EXIT_SUCCESS);
+ lttng_kconsumerd_send_error(ctx, KCONSUMERD_EXIT_SUCCESS);
goto end;
error:
ret = EXIT_FAILURE;
- kconsumerd_send_error(ctx, KCONSUMERD_EXIT_FAILURE);
+ lttng_kconsumerd_send_error(ctx, KCONSUMERD_EXIT_FAILURE);
end:
- kconsumerd_destroy(ctx);
- kconsumerd_cleanup();
+ lttng_kconsumerd_destroy(ctx);
+ lttng_kconsumerd_cleanup();
return ret;
}