projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clean-up: spelling fix in a comment
[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 2d3714e684bccab1deba3b522de7b7de3333faa0..8e1879f50ae3875dd90581c1fe3a43465d8057af 100644
(file)
--- a/
src/bin/lttng-relayd/main.c
+++ b/
src/bin/lttng-relayd/main.c
@@
-1248,7
+1248,7
@@
int relay_add_stream(struct lttcomm_relayd_hdr *recv_hdr,
struct relay_session *session = conn->session;
struct relay_stream *stream = NULL;
struct lttcomm_relayd_status_stream reply;
struct relay_session *session = conn->session;
struct relay_stream *stream = NULL;
struct lttcomm_relayd_status_stream reply;
- struct ctf_trace *trace;
+ struct ctf_trace *trace
= NULL
;
if (!session || conn->version_check_done == 0) {
ERR("Trying to add a stream before version check");
if (!session || conn->version_check_done == 0) {
ERR("Trying to add a stream before version check");
@@
-1276,7
+1276,6
@@
int relay_add_stream(struct lttcomm_relayd_hdr *recv_hdr,
goto err_free_stream;
}
goto err_free_stream;
}
- rcu_read_lock();
stream->stream_handle = ++last_relay_stream_id;
stream->prev_seq = -1ULL;
stream->session_id = session->id;
stream->stream_handle = ++last_relay_stream_id;
stream->prev_seq = -1ULL;
stream->session_id = session->id;
@@
-1289,7
+1288,7
@@
int relay_add_stream(struct lttcomm_relayd_hdr *recv_hdr,
ret = utils_mkdir_recursive(stream->path_name, S_IRWXU | S_IRWXG);
if (ret < 0) {
ERR("relay creating output directory");
ret = utils_mkdir_recursive(stream->path_name, S_IRWXU | S_IRWXG);
if (ret < 0) {
ERR("relay creating output directory");
- goto e
nd
;
+ goto e
rr_free_stream
;
}
/*
}
/*
@@
-1300,7
+1299,7
@@
int relay_add_stream(struct lttcomm_relayd_hdr *recv_hdr,
stream->tracefile_size, 0, relayd_uid, relayd_gid, NULL);
if (ret < 0) {
ERR("Create output file");
stream->tracefile_size, 0, relayd_uid, relayd_gid, NULL);
if (ret < 0) {
ERR("Create output file");
- goto e
nd
;
+ goto e
rr_free_stream
;
}
stream->fd = ret;
if (stream->tracefile_size) {
}
stream->fd = ret;
if (stream->tracefile_size) {
@@
-1309,6
+1308,8
@@
int relay_add_stream(struct lttcomm_relayd_hdr *recv_hdr,
DBG("Tracefile %s/%s created", stream->path_name, stream->channel_name);
}
DBG("Tracefile %s/%s created", stream->path_name, stream->channel_name);
}
+ /* Protect access to "trace" */
+ rcu_read_lock();
trace = ctf_trace_find_by_path(session->ctf_traces_ht, stream->path_name);
if (!trace) {
trace = ctf_trace_create(stream->path_name);
trace = ctf_trace_find_by_path(session->ctf_traces_ht, stream->path_name);
if (!trace) {
trace = ctf_trace_create(stream->path_name);
@@
-1336,6
+1337,9
@@
int relay_add_stream(struct lttcomm_relayd_hdr *recv_hdr,
/*
* Both in the ctf_trace object and the global stream ht since the data
* side of the relayd does not have the concept of session.
/*
* Both in the ctf_trace object and the global stream ht since the data
* side of the relayd does not have the concept of session.
+ *
+ * rcu_read_lock() is kept to protect the stream which is now part of
+ * the relay_streams_ht.
*/
lttng_ht_add_unique_u64(relay_streams_ht, &stream->node);
cds_list_add_tail(&stream->trace_list, &trace->stream_list);
*/
lttng_ht_add_unique_u64(relay_streams_ht, &stream->node);
cds_list_add_tail(&stream->trace_list, &trace->stream_list);
@@
-1363,7
+1367,13
@@
end:
ERR("Relay sending stream id");
ret = send_ret;
}
ERR("Relay sending stream id");
ret = send_ret;
}
+ /*
+ * rcu_read_lock() was held to protect either "trace" OR the "stream" at
+ * this point.
+ */
rcu_read_unlock();
rcu_read_unlock();
+ trace = NULL;
+ stream = NULL;
end_no_session:
return ret;
end_no_session:
return ret;
@@
-2559,8
+2569,8
@@
restart:
nb_fd = ret;
/*
nb_fd = ret;
/*
- * Process control. The control connection is prioritised so we
don't
- *
starve it with high throughout
put tracing data on the data
+ * Process control. The control connection is prioritised so we
+ *
don't starve it with high through
put tracing data on the data
* connection.
*/
for (i = 0; i < nb_fd; i++) {
* connection.
*/
for (i = 0; i < nb_fd; i++) {
This page took
0.026864 seconds
and
5
git commands to generate.