* 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("strndup");
+ PERROR("lttng_strndup");
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("strndup");
+ PERROR("lttng_strndup");
goto error;
}
DBG3("Kernel network consumer subdir path: %s", pathname);
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: