/*
* Delete the consumer_output object from the list and free the ptr.
+ *
+ * Should *NOT* be called with RCU read-side lock held.
*/
void consumer_destroy_output(struct consumer_output *obj)
{
/*
* Copy consumer output and returned the newly allocated copy.
+ *
+ * Should *NOT* be called with RCU read-side lock held.
*/
struct consumer_output *consumer_copy_output(struct consumer_output *obj)
{
if (uri->port == 0) {
/* Assign default port. */
uri->port = DEFAULT_NETWORK_CONTROL_PORT;
+ } else {
+ if (obj->dst.net.data_isset && uri->port ==
+ obj->dst.net.data.port) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
}
DBG3("Consumer control URI set with port %d", uri->port);
break;
if (uri->port == 0) {
/* Assign default port. */
uri->port = DEFAULT_NETWORK_DATA_PORT;
+ } else {
+ if (obj->dst.net.control_isset && uri->port ==
+ obj->dst.net.control.port) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
}
DBG3("Consumer data URI set with port %d", uri->port);
break;
default:
ERR("Set network uri type unknown %d", uri->stype);
+ ret = -LTTNG_ERR_INVALID;
goto error;
}
}
if (ret < 0) {
PERROR("snprintf set consumer uri subdir");
+ ret = -LTTNG_ERR_NOMEM;
goto error;
}
equal:
return 1;
error:
- return -1;
+ return ret;
}
/*
* On success return positive value. On error, negative value.
*/
int consumer_send_relayd_socket(struct consumer_socket *consumer_sock,
- struct lttcomm_sock *sock, struct consumer_output *consumer,
+ struct lttcomm_relayd_sock *rsock, struct consumer_output *consumer,
enum lttng_stream_type type, uint64_t session_id)
{
int ret;
struct lttcomm_consumer_msg msg;
/* Code flow error. Safety net. */
- assert(sock);
+ assert(rsock);
assert(consumer);
assert(consumer_sock);
msg.u.relayd_sock.net_index = consumer->net_seq_index;
msg.u.relayd_sock.type = type;
msg.u.relayd_sock.session_id = session_id;
- memcpy(&msg.u.relayd_sock.sock, sock, sizeof(msg.u.relayd_sock.sock));
+ memcpy(&msg.u.relayd_sock.sock, rsock, sizeof(msg.u.relayd_sock.sock));
DBG3("Sending relayd sock info to consumer on %d", consumer_sock->fd);
ret = lttcomm_send_unix_sock(consumer_sock->fd, &msg, sizeof(msg));
if (ret < 0) {
/* The above call will print a PERROR on error. */
- DBG("Error when sending relayd sockets on sock %d", sock->fd);
+ DBG("Error when sending relayd sockets on sock %d", rsock->sock.fd);
goto error;
}
}
DBG3("Sending relayd socket file descriptor to consumer");
- ret = consumer_send_fds(consumer_sock, &sock->fd, 1);
+ ret = consumer_send_fds(consumer_sock, &rsock->sock.fd, 1);
if (ret < 0) {
goto error;
}
goto end;
}
- DBG3("Consumer pushing metadata on sock %d of len %lu", socket->fd, len);
+ DBG3("Consumer pushing metadata on sock %d of len %zu", socket->fd, len);
ret = lttcomm_send_unix_sock(socket->fd, metadata_str, len);
if (ret < 0) {