diff options
-rw-r--r-- | src/tracing/node_trace_buffer.cc | 25 | ||||
-rw-r--r-- | src/tracing/node_trace_writer.cc | 25 |
2 files changed, 33 insertions, 17 deletions
diff --git a/src/tracing/node_trace_buffer.cc b/src/tracing/node_trace_buffer.cc index 3b7119f6d5..796c9f5292 100644 --- a/src/tracing/node_trace_buffer.cc +++ b/src/tracing/node_trace_buffer.cc @@ -1,4 +1,5 @@ #include "tracing/node_trace_buffer.h" +#include "util-inl.h" namespace node { namespace tracing { @@ -170,15 +171,25 @@ void NodeTraceBuffer::NonBlockingFlushSignalCb(uv_async_t* signal) { // static void NodeTraceBuffer::ExitSignalCb(uv_async_t* signal) { - NodeTraceBuffer* buffer = reinterpret_cast<NodeTraceBuffer*>(signal->data); - uv_close(reinterpret_cast<uv_handle_t*>(&buffer->flush_signal_), nullptr); - uv_close(reinterpret_cast<uv_handle_t*>(&buffer->exit_signal_), + NodeTraceBuffer* buffer = + ContainerOf(&NodeTraceBuffer::exit_signal_, signal); + + // Close both flush_signal_ and exit_signal_. + uv_close(reinterpret_cast<uv_handle_t*>(&buffer->flush_signal_), [](uv_handle_t* signal) { + NodeTraceBuffer* buffer = + ContainerOf(&NodeTraceBuffer::flush_signal_, + reinterpret_cast<uv_async_t*>(signal)); + + uv_close(reinterpret_cast<uv_handle_t*>(&buffer->exit_signal_), + [](uv_handle_t* signal) { NodeTraceBuffer* buffer = - reinterpret_cast<NodeTraceBuffer*>(signal->data); - Mutex::ScopedLock scoped_lock(buffer->exit_mutex_); - buffer->exited_ = true; - buffer->exit_cond_.Signal(scoped_lock); + ContainerOf(&NodeTraceBuffer::exit_signal_, + reinterpret_cast<uv_async_t*>(signal)); + Mutex::ScopedLock scoped_lock(buffer->exit_mutex_); + buffer->exited_ = true; + buffer->exit_cond_.Signal(scoped_lock); + }); }); } diff --git a/src/tracing/node_trace_writer.cc b/src/tracing/node_trace_writer.cc index 5979810668..b93688cc95 100644 --- a/src/tracing/node_trace_writer.cc +++ b/src/tracing/node_trace_writer.cc @@ -218,18 +218,23 @@ void NodeTraceWriter::AfterWrite() { void NodeTraceWriter::ExitSignalCb(uv_async_t* signal) { NodeTraceWriter* trace_writer = ContainerOf(&NodeTraceWriter::exit_signal_, signal); + // Close both flush_signal_ and exit_signal_. uv_close(reinterpret_cast<uv_handle_t*>(&trace_writer->flush_signal_), - nullptr); - uv_close(reinterpret_cast<uv_handle_t*>(&trace_writer->exit_signal_), [](uv_handle_t* signal) { - NodeTraceWriter* trace_writer = - ContainerOf(&NodeTraceWriter::exit_signal_, - reinterpret_cast<uv_async_t*>(signal)); - Mutex::ScopedLock scoped_lock(trace_writer->request_mutex_); - trace_writer->exited_ = true; - trace_writer->exit_cond_.Signal(scoped_lock); - }); + NodeTraceWriter* trace_writer = + ContainerOf(&NodeTraceWriter::flush_signal_, + reinterpret_cast<uv_async_t*>(signal)); + uv_close( + reinterpret_cast<uv_handle_t*>(&trace_writer->exit_signal_), + [](uv_handle_t* signal) { + NodeTraceWriter* trace_writer = + ContainerOf(&NodeTraceWriter::exit_signal_, + reinterpret_cast<uv_async_t*>(signal)); + Mutex::ScopedLock scoped_lock(trace_writer->request_mutex_); + trace_writer->exited_ = true; + trace_writer->exit_cond_.Signal(scoped_lock); + }); + }); } - } // namespace tracing } // namespace node |