TrackAsyncReporters installs the tracking delegate.
()
| 444 | |
| 445 | // TrackAsyncReporters installs the tracking delegate. |
| 446 | func TrackAsyncReporters() { |
| 447 | asyncReporterTracker = newReporterTracker() |
| 448 | |
| 449 | // Swap the delegate: Replace the default pass-through with tracking logic. |
| 450 | internal.AsyncReporterCleanupDelegate = func(originalCleanup func()) func() { |
| 451 | // 1. Capture Stack Trace (happens during Registration) |
| 452 | token := asyncReporterTracker.register() |
| 453 | |
| 454 | // 2. Return Wrapped Cleanup |
| 455 | return func() { |
| 456 | // Defer unregister to ensure we stop tracking even if the original cleanup panics. |
| 457 | defer asyncReporterTracker.unregister(token) |
| 458 | |
| 459 | if originalCleanup != nil { |
| 460 | originalCleanup() |
| 461 | } |
| 462 | } |
| 463 | } |
| 464 | } |
| 465 | |
| 466 | // CheckAsyncReporters verifies that no leaks exist and restores the default delegate. |
| 467 | func CheckAsyncReporters(logger Logger) { |