* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include <common/common.h>
#include <common/defaults.h>
+#include <common/compat/string.h>
#include "consumer.h"
#include "health-sessiond.h"
PERROR("snprintf kernel channel path");
goto error;
}
- pathname = strndup(tmp_path, sizeof(tmp_path));
+ pathname = lttng_strndup(tmp_path, sizeof(tmp_path));
+ if (!pathname) {
+ PERROR("lttng_strndup");
+ goto error;
+ }
/* Create directory */
ret = run_as_mkdir_recursive(pathname, S_IRWXU | S_IRWXG, uid, gid);
if (ret < 0) {
- if (ret != -EEXIST) {
+ if (errno != EEXIST) {
ERR("Trace directory creation error");
goto error;
}
PERROR("snprintf kernel metadata path");
goto error;
}
- pathname = strndup(tmp_path, sizeof(tmp_path));
+ pathname = lttng_strndup(tmp_path, sizeof(tmp_path));
+ if (!pathname) {
+ PERROR("lttng_strndup");
+ goto error;
+ }
DBG3("Kernel network consumer subdir path: %s", pathname);
}
if (monitor) {
pathname = create_channel_path(consumer, session->uid, session->gid);
- if (!pathname) {
- ret = -1;
- goto error;
- }
} else {
/* Empty path. */
pathname = strdup("");
}
+ if (!pathname) {
+ ret = -1;
+ goto error;
+ }
/* Prep channel message structure */
consumer_init_channel_comm_msg(&lkm,
if (monitor) {
pathname = create_channel_path(consumer, session->uid, session->gid);
- if (!pathname) {
- ret = -1;
- goto error;
- }
} else {
/* Empty path. */
pathname = strdup("");
}
+ if (!pathname) {
+ ret = -1;
+ goto error;
+ }
/* Prep channel message structure */
consumer_init_channel_comm_msg(&lkm,
struct ltt_kernel_channel *channel, struct ltt_kernel_session *session,
unsigned int monitor)
{
- int ret;
+ int ret = LTTNG_OK;
struct ltt_kernel_stream *stream;
/* Safety net */
DBG("Sending streams of channel %s to kernel consumer",
channel->channel->name);
- ret = kernel_consumer_add_channel(sock, channel, session, monitor);
- if (ret < 0) {
- goto error;
+ if (!channel->sent_to_consumer) {
+ ret = kernel_consumer_add_channel(sock, channel, session, monitor);
+ if (ret < 0) {
+ goto error;
+ }
+ channel->sent_to_consumer = true;
}
/* Send streams */
cds_list_for_each_entry(stream, &channel->stream_list.head, list) {
- if (!stream->fd) {
+ if (!stream->fd || stream->sent_to_consumer) {
continue;
}
if (ret < 0) {
goto error;
}
+ stream->sent_to_consumer = true;
}
error: