summaryrefslogtreecommitdiff
path: root/internal/ior.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/ior.go')
-rw-r--r--internal/ior.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/internal/ior.go b/internal/ior.go
index 9a60869..02a5b30 100644
--- a/internal/ior.go
+++ b/internal/ior.go
@@ -499,10 +499,16 @@ func runTraceWithContext(parentCtx context.Context, cfg flags.Config, started ch
}()
defer releaseBindings()
- ch, err := setupEventChannel(bpfModule)
+ ch, rb, err := setupEventChannel(bpfModule)
if err != nil {
return err
}
+ // Stop the ring-buffer polling goroutine before the module is closed.
+ // rb.Stop() signals the background goroutine, drains the channel, and
+ // waits for the goroutine to exit; bpfModule.Close() (deferred above)
+ // then calls rb.Close() which frees the C ring_buffer struct. Both are
+ // idempotent so double-calling is safe.
+ defer rb.Stop()
ctx, cancel, stopSignals := setupTraceContext(parentCtx, cfg, logln)
defer cancel()
defer stopSignals()