|
1 | 1 | #include "tracing/node_trace_buffer.h" |
| 2 | +#include "util-inl.h" |
2 | 3 |
|
3 | 4 | namespace node { |
4 | 5 | namespace tracing { |
@@ -170,15 +171,25 @@ void NodeTraceBuffer::NonBlockingFlushSignalCb(uv_async_t* signal) { |
170 | 171 |
|
171 | 172 | // static |
172 | 173 | void NodeTraceBuffer::ExitSignalCb(uv_async_t* signal) { |
173 | | - NodeTraceBuffer* buffer = reinterpret_cast<NodeTraceBuffer*>(signal->data); |
174 | | - uv_close(reinterpret_cast<uv_handle_t*>(&buffer->flush_signal_), nullptr); |
175 | | - uv_close(reinterpret_cast<uv_handle_t*>(&buffer->exit_signal_), |
| 174 | + NodeTraceBuffer* buffer = |
| 175 | + ContainerOf(&NodeTraceBuffer::exit_signal_, signal); |
| 176 | + |
| 177 | + // Close both flush_signal_ and exit_signal_. |
| 178 | + uv_close(reinterpret_cast<uv_handle_t*>(&buffer->flush_signal_), |
176 | 179 | [](uv_handle_t* signal) { |
| 180 | + NodeTraceBuffer* buffer = |
| 181 | + ContainerOf(&NodeTraceBuffer::flush_signal_, |
| 182 | + reinterpret_cast<uv_async_t*>(signal)); |
| 183 | + |
| 184 | + uv_close(reinterpret_cast<uv_handle_t*>(&buffer->exit_signal_), |
| 185 | + [](uv_handle_t* signal) { |
177 | 186 | NodeTraceBuffer* buffer = |
178 | | - reinterpret_cast<NodeTraceBuffer*>(signal->data); |
179 | | - Mutex::ScopedLock scoped_lock(buffer->exit_mutex_); |
180 | | - buffer->exited_ = true; |
181 | | - buffer->exit_cond_.Signal(scoped_lock); |
| 187 | + ContainerOf(&NodeTraceBuffer::exit_signal_, |
| 188 | + reinterpret_cast<uv_async_t*>(signal)); |
| 189 | + Mutex::ScopedLock scoped_lock(buffer->exit_mutex_); |
| 190 | + buffer->exited_ = true; |
| 191 | + buffer->exit_cond_.Signal(scoped_lock); |
| 192 | + }); |
182 | 193 | }); |
183 | 194 | } |
184 | 195 |
|
|
0 commit comments