CheckAsyncReporters verifies that no leaks exist and restores the default delegate.
(logger Logger)
| 465 | |
| 466 | // CheckAsyncReporters verifies that no leaks exist and restores the default delegate. |
| 467 | func CheckAsyncReporters(logger Logger) { |
| 468 | // Restore the delegate: Reset to the default pass-through behavior. |
| 469 | internal.AsyncReporterCleanupDelegate = func(cleanup func()) func() { |
| 470 | return cleanup |
| 471 | } |
| 472 | |
| 473 | if asyncReporterTracker == nil { |
| 474 | return |
| 475 | } |
| 476 | |
| 477 | leaks := asyncReporterTracker.leakedStackTraces() |
| 478 | if len(leaks) > 0 { |
| 479 | // Join all stack traces into one message |
| 480 | allTraces := "" |
| 481 | for _, trace := range leaks { |
| 482 | allTraces += trace |
| 483 | } |
| 484 | logger.Errorf("Found %d leaked async reporters:%s", len(leaks), allTraces) |
| 485 | } |
| 486 | |
| 487 | // Clean up global state |
| 488 | asyncReporterTracker = nil |
| 489 | } |