|
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