33#include < string.h>
44#include < fcntl.h>
55
6- #include " util.h"
6+ #include " util-inl .h"
77
88namespace node {
99namespace tracing {
1010
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+
1418 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+ });
1625 CHECK_EQ (err, 0 );
1726
1827 exit_signal_.data = this ;
@@ -126,11 +135,6 @@ void NodeTraceWriter::FlushPrivate() {
126135 WriteToFile (std::move (str), highest_request_id);
127136}
128137
129- void NodeTraceWriter::FlushSignalCb (uv_async_t * signal) {
130- NodeTraceWriter* trace_writer = static_cast <NodeTraceWriter*>(signal->data );
131- trace_writer->FlushPrivate ();
132- }
133-
134138void NodeTraceWriter::Flush (bool blocking) {
135139 Mutex::ScopedLock scoped_lock (request_mutex_);
136140 if (!json_trace_writer_) {
@@ -170,7 +174,7 @@ void NodeTraceWriter::WriteToFile(std::string&& str, int highest_request_id) {
170174}
171175
172176void NodeTraceWriter::WriteCb (uv_fs_t * req) {
173- WriteRequest* write_req = reinterpret_cast <WriteRequest*>( req);
177+ WriteRequest* write_req = ContainerOf (&WriteRequest::req, req);
174178 CHECK_GE (write_req->req .result , 0 );
175179
176180 NodeTraceWriter* writer = write_req->writer ;
@@ -187,13 +191,15 @@ void NodeTraceWriter::WriteCb(uv_fs_t* req) {
187191
188192// static
189193void 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);
191196 uv_close (reinterpret_cast <uv_handle_t *>(&trace_writer->flush_signal_ ),
192197 nullptr );
193198 uv_close (reinterpret_cast <uv_handle_t *>(&trace_writer->exit_signal_ ),
194199 [](uv_handle_t * signal) {
195200 NodeTraceWriter* trace_writer =
196- static_cast <NodeTraceWriter*>(signal->data );
201+ ContainerOf (&NodeTraceWriter::exit_signal_,
202+ reinterpret_cast <uv_async_t *>(signal));
197203 Mutex::ScopedLock scoped_lock (trace_writer->request_mutex_ );
198204 trace_writer->exited_ = true ;
199205 trace_writer->exit_cond_ .Signal (scoped_lock);
0 commit comments