| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent dc1bc15 commit 2ae2727
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -292,19 +292,21 @@ void PrintLibuvHandleInformation(uv_loop_t* loop, FILE* stream) { | |||
| 292 | 292 | struct Info { | |
| 293 | 293 | std::unique_ptr<NativeSymbolDebuggingContext> ctx; | |
| 294 | 294 | FILE* stream; | |
| 295 | + size_t num_handles; | ||
| 295 | 296 | }; | |
| 296 | 297 | ||
| 297 | - Info info { NativeSymbolDebuggingContext::New(), stream }; | ||
| 298 | + Info info { NativeSymbolDebuggingContext::New(), stream, 0 }; | ||
| 298 | 299 | ||
| 299 | - fprintf(stream, "uv loop at [%p] has %d active handles\n", | ||
| 300 | - loop, loop->active_handles); | ||
| 300 | + fprintf(stream, "uv loop at [%p] has open handles:\n", loop); | ||
| 301 | 301 | ||
| 302 | 302 | uv_walk(loop, [](uv_handle_t* handle, void* arg) { | |
| 303 | 303 | Info* info = static_cast<Info*>(arg); | |
| 304 | 304 | NativeSymbolDebuggingContext* sym_ctx = info->ctx.get(); | |
| 305 | 305 | FILE* stream = info->stream; | |
| 306 | + info->num_handles++; | ||
| 306 | 307 | ||
| 307 | - fprintf(stream, "[%p] %s\n", handle, uv_handle_type_name(handle->type)); | ||
| 308 | + fprintf(stream, "[%p] %s%s\n", handle, uv_handle_type_name(handle->type), | ||
| 309 | + uv_is_active(handle) ? " (active)" : ""); | ||
| 308 | 310 | ||
| 309 | 311 | void* close_cb = reinterpret_cast<void*>(handle->close_cb); | |
| 310 | 312 | fprintf(stream, "\tClose callback: %p %s\n", | |
@@ -328,6 +330,9 @@ void PrintLibuvHandleInformation(uv_loop_t* loop, FILE* stream) { | |||
| 328 | 330 | first_field, sym_ctx->LookupSymbol(first_field).Display().c_str()); | |
| 329 | 331 | } | |
| 330 | 332 | }, &info); | |
| 333 | + | ||
| 334 | + fprintf(stream, "uv loop at [%p] has %zu open handles in total\n", | ||
| 335 | + loop, info.num_handles); | ||
| 331 | 336 | } | |
| 332 | 337 | ||
| 333 | 338 | std::vector<std::string> NativeSymbolDebuggingContext::GetLoadedLibraries() { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -47,8 +47,8 @@ if (process.argv[2] === 'child') { | |||
| 47 | 47 | ||
| 48 | 48 | // Parse output that is formatted like this: | |
| 49 | 49 | ||
| 50 | - // uv loop at [0x559b65ed5770] has active handles | ||
| 51 | - // [0x7f2de0018430] timer | ||
| 50 | + // uv loop at [0x559b65ed5770] has open handles: | ||
| 51 | + // [0x7f2de0018430] timer (active) | ||
| 52 | 52 | // Close callback: 0x7f2df31de220 CloseCallback(uv_handle_s*) [...] | |
| 53 | 53 | // Data: 0x7f2df33df140 example_instance [...] | |
| 54 | 54 | // (First field): 0x7f2df33dedc0 vtable for ExampleOwnerClass [...] | |
@@ -58,6 +58,7 @@ if (process.argv[2] === 'child') { | |||
| 58 | 58 | // [0x7f2de000b910] timer | |
| 59 | 59 | // Close callback: 0x7f2df31de220 CloseCallback(uv_handle_s*) [...] | |
| 60 | 60 | // Data: 0x42 | |
| 61 | + // uv loop at [0x559b65ed5770] has 3 open handles in total | ||
| 61 | 62 | ||
| 62 | 63 | function isGlibc() { | |
| 63 | 64 | try { | |
@@ -89,15 +90,15 @@ if (process.argv[2] === 'child') { | |||
| 89 | 90 | ||
| 90 | 91 | switch (state) { | |
| 91 | 92 | case 'initial': | |
| 92 | - assert(/^uv loop at \[.+\] has \d+ active handles$/.test(line), line); | ||
| 93 | + assert(/^uv loop at \[.+\] has open handles:$/.test(line), line); | ||
| 93 | 94 | state = 'handle-start'; | |
| 94 | 95 | break; | |
| 95 | 96 | case 'handle-start': | |
| 96 | - if (/Assertion .+ failed/.test(line)) { | ||
| 97 | - state = 'done'; | ||
| 97 | + if (/^uv loop at \[.+\] has \d+ open handles in total$/.test(line)) { | ||
| 98 | + state = 'assertion-failure'; | ||
| 98 | 99 | break; | |
| 99 | 100 | } | |
| 100 | - assert(/^\[.+\] timer$/.test(line), line); | ||
| 101 | + assert(/^\[.+\] timer( \(active\))?$/.test(line), line); | ||
| 101 | 102 | state = 'close-callback'; | |
| 102 | 103 | break; | |
| 103 | 104 | case 'close-callback': | |
@@ -109,15 +110,19 @@ if (process.argv[2] === 'child') { | |||
| 109 | 110 | state = 'maybe-first-field'; | |
| 110 | 111 | break; | |
| 111 | 112 | case 'maybe-first-field': | |
| 112 | - if (/^\(First field\)$/.test(line)) { | ||
| 113 | + if (!/^\(First field\)/.test(line)) { | ||
| 113 | 114 | lines.unshift(line); | |
| 114 | - state = 'handle-start'; | ||
| 115 | - break; | ||
| 116 | 115 | } | |
| 117 | - state = 'maybe-first-field'; | ||
| 116 | + state = 'handle-start'; | ||
| 117 | + break; | ||
| 118 | + case 'assertion-failure': | ||
| 119 | + assert(/Assertion .+ failed/.test(line), line); | ||
| 120 | + state = 'done'; | ||
| 118 | 121 | break; | |
| 119 | 122 | case 'done': | |
| 120 | 123 | break; | |
| 121 | 124 | } | |
| 122 | 125 | } | |
| 126 | + | ||
| 127 | + assert.strictEqual(state, 'done'); | ||
| 123 | 128 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments