projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: Off by uint64_t in the metadata transfer
[lttng-tools.git]
/
src
/
bin
/
lttng-relayd
/
main.c
diff --git
a/src/bin/lttng-relayd/main.c
b/src/bin/lttng-relayd/main.c
index 3613281dd03e971a45a1187495e40b1bc0f95f74..f0663d10dd85ee1673dcfe79f561cd1102bb1f86 100644
(file)
--- a/
src/bin/lttng-relayd/main.c
+++ b/
src/bin/lttng-relayd/main.c
@@
-1071,7
+1071,12
@@
int relay_recv_metadata(struct lttcomm_relayd_hdr *recv_hdr,
}
data_size = be64toh(recv_hdr->data_size);
}
data_size = be64toh(recv_hdr->data_size);
- payload_size = data_size - sizeof(uint64_t);
+ payload_size = data_size;
+ /*
+ * Add 8 bytes (uint64_t) to the data size which is the value of the
+ * stream_id and the payload size.
+ */
+ data_size += sizeof(uint64_t);
if (data_buffer_size < data_size) {
data_buffer = realloc(data_buffer, data_size);
if (!data_buffer) {
if (data_buffer_size < data_size) {
data_buffer = realloc(data_buffer, data_size);
if (!data_buffer) {
@@
-1083,7
+1088,8
@@
int relay_recv_metadata(struct lttcomm_relayd_hdr *recv_hdr,
}
memset(data_buffer, 0, data_size);
DBG2("Relay receiving metadata, waiting for %lu bytes", data_size);
}
memset(data_buffer, 0, data_size);
DBG2("Relay receiving metadata, waiting for %lu bytes", data_size);
- ret = cmd->sock->ops->recvmsg(cmd->sock, data_buffer, data_size, MSG_WAITALL);
+ ret = cmd->sock->ops->recvmsg(cmd->sock, data_buffer, data_size,
+ MSG_WAITALL);
if (ret < 0 || ret != data_size) {
ret = -1;
ERR("Relay didn't receive the whole metadata");
if (ret < 0 || ret != data_size) {
ret = -1;
ERR("Relay didn't receive the whole metadata");
@@
-1103,7
+1109,7
@@
int relay_recv_metadata(struct lttcomm_relayd_hdr *recv_hdr,
ret = write(metadata_stream->fd, metadata_struct->payload,
payload_size);
} while (ret < 0 && errno == EINTR);
ret = write(metadata_stream->fd, metadata_struct->payload,
payload_size);
} while (ret < 0 && errno == EINTR);
- if (ret <
(payload_size)
) {
+ if (ret <
payload_size
) {
ERR("Relay error writing metadata on file");
ret = -1;
goto end_unlock;
ERR("Relay error writing metadata on file");
ret = -1;
goto end_unlock;
@@
-1111,7
+1117,7
@@
int relay_recv_metadata(struct lttcomm_relayd_hdr *recv_hdr,
DBG2("Relay metadata written");
end_unlock:
DBG2("Relay metadata written");
end_unlock:
- rcu_read_lock();
+ rcu_read_
un
lock();
end:
return ret;
}
end:
return ret;
}
@@
-1234,6
+1240,7
@@
int relay_process_data(struct relay_command *cmd, struct lttng_ht *streams_ht)
}
memset(data_buffer, 0, data_size);
}
memset(data_buffer, 0, data_size);
+ DBG3("Receiving data of size %u for stream id %zu", data_size, stream_id);
ret = cmd->sock->ops->recvmsg(cmd->sock, data_buffer, data_size, MSG_WAITALL);
if (ret <= 0) {
ret = -1;
ret = cmd->sock->ops->recvmsg(cmd->sock, data_buffer, data_size, MSG_WAITALL);
if (ret <= 0) {
ret = -1;
@@
-1377,6
+1384,7
@@
void *relay_thread_worker(void *data)
/* Infinite blocking call, waiting for transmission */
restart:
/* Infinite blocking call, waiting for transmission */
restart:
+ DBG3("Relayd worker thread polling...");
ret = lttng_poll_wait(&events, -1);
if (ret < 0) {
/*
ret = lttng_poll_wait(&events, -1);
if (ret < 0) {
/*
This page took
0.02355 seconds
and
4
git commands to generate.