3
3
#include < string.h>
4
4
#include < fcntl.h>
5
5
6
- #include " util.h"
6
+ #include " util-inl .h"
7
7
8
8
namespace node {
9
9
namespace tracing {
10
10
11
- NodeTraceWriter::NodeTraceWriter (const std::string& log_file_pattern,
12
- uv_loop_t * tracing_loop)
13
- : tracing_loop_(tracing_loop), log_file_pattern_(log_file_pattern) {
11
+ NodeTraceWriter::NodeTraceWriter (const std::string& log_file_pattern)
12
+ : log_file_pattern_(log_file_pattern) {}
13
+
14
+ void NodeTraceWriter::InitializeOnThread (uv_loop_t * loop) {
15
+ CHECK_NULL (tracing_loop_);
16
+ tracing_loop_ = loop;
17
+
14
18
flush_signal_.data = this ;
15
- int err = uv_async_init (tracing_loop_, &flush_signal_, FlushSignalCb);
19
+ int err = uv_async_init (tracing_loop_, &flush_signal_,
20
+ [](uv_async_t * signal) {
21
+ NodeTraceWriter* trace_writer =
22
+ ContainerOf (&NodeTraceWriter::flush_signal_, signal);
23
+ trace_writer->FlushPrivate ();
24
+ });
16
25
CHECK_EQ (err, 0 );
17
26
18
27
exit_signal_.data = this ;
@@ -126,11 +135,6 @@ void NodeTraceWriter::FlushPrivate() {
126
135
WriteToFile (std::move (str), highest_request_id);
127
136
}
128
137
129
- void NodeTraceWriter::FlushSignalCb (uv_async_t * signal) {
130
- NodeTraceWriter* trace_writer = static_cast <NodeTraceWriter*>(signal->data );
131
- trace_writer->FlushPrivate ();
132
- }
133
-
134
138
void NodeTraceWriter::Flush (bool blocking) {
135
139
Mutex::ScopedLock scoped_lock (request_mutex_);
136
140
if (!json_trace_writer_) {
@@ -170,7 +174,7 @@ void NodeTraceWriter::WriteToFile(std::string&& str, int highest_request_id) {
170
174
}
171
175
172
176
void NodeTraceWriter::WriteCb (uv_fs_t * req) {
173
- WriteRequest* write_req = reinterpret_cast <WriteRequest*>( req);
177
+ WriteRequest* write_req = ContainerOf (&WriteRequest::req, req);
174
178
CHECK_GE (write_req->req .result , 0 );
175
179
176
180
NodeTraceWriter* writer = write_req->writer ;
@@ -187,13 +191,15 @@ void NodeTraceWriter::WriteCb(uv_fs_t* req) {
187
191
188
192
// static
189
193
void NodeTraceWriter::ExitSignalCb (uv_async_t * signal) {
190
- NodeTraceWriter* trace_writer = static_cast <NodeTraceWriter*>(signal->data );
194
+ NodeTraceWriter* trace_writer =
195
+ ContainerOf (&NodeTraceWriter::exit_signal_, signal);
191
196
uv_close (reinterpret_cast <uv_handle_t *>(&trace_writer->flush_signal_ ),
192
197
nullptr );
193
198
uv_close (reinterpret_cast <uv_handle_t *>(&trace_writer->exit_signal_ ),
194
199
[](uv_handle_t * signal) {
195
200
NodeTraceWriter* trace_writer =
196
- static_cast <NodeTraceWriter*>(signal->data );
201
+ ContainerOf (&NodeTraceWriter::exit_signal_,
202
+ reinterpret_cast <uv_async_t *>(signal));
197
203
Mutex::ScopedLock scoped_lock (trace_writer->request_mutex_ );
198
204
trace_writer->exited_ = true ;
199
205
trace_writer->exit_cond_ .Signal (scoped_lock);
0 commit comments