Skip to content

Commit ef559d4

Browse files
committed
fix/inspektor_gadget: Use lock for formatter
Signed-off-by: Qasim Sarfraz <[email protected]>
1 parent c3d153f commit ef559d4

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

internal/components/inspektorgadget/gadgetmanager.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"slices"
99
"strings"
10+
"sync"
1011
"time"
1112

1213
"github.com/inspektor-gadget/inspektor-gadget/pkg/datasource"
@@ -63,7 +64,9 @@ func NewGadgetManager() GadgetManager {
6364
return &manager{}
6465
}
6566

66-
type manager struct{}
67+
type manager struct {
68+
formatterMu sync.Mutex
69+
}
6770

6871
// RunGadget runs a gadget with the specified image and parameters for a given duration
6972
func (g *manager) RunGadget(ctx context.Context, image string, params map[string]string, duration time.Duration) (string, error) {
@@ -72,7 +75,7 @@ func (g *manager) RunGadget(ctx context.Context, image string, params map[string
7275
ctx,
7376
image,
7477
gadgetcontext.WithDataOperators(
75-
outputDataOperator(func(data []byte) {
78+
g.outputDataOperator(func(data []byte) {
7679
results.Write(data)
7780
results.WriteByte('\n')
7881
}),
@@ -107,7 +110,7 @@ func truncateResults(results string, latest bool) string {
107110
return fmt.Sprintf("\n<isTruncated>true</isTruncated>\n<results>%s</results>\n", truncated)
108111
}
109112

110-
func outputDataOperator(cb func(data []byte)) operators.DataOperator {
113+
func (g *manager) outputDataOperator(cb func(data []byte)) operators.DataOperator {
111114
const opPriority = 50000
112115
return simple.New("outputDataOperator",
113116
simple.OnInit(func(gadgetCtx operators.GadgetContext) error {
@@ -124,6 +127,8 @@ func outputDataOperator(cb func(data []byte)) operators.DataOperator {
124127
}
125128

126129
err := d.Subscribe(func(source datasource.DataSource, data datasource.Data) error {
130+
g.formatterMu.Lock()
131+
defer g.formatterMu.Unlock()
127132
jsonData := jsonFormatter.Marshal(data)
128133
cb(jsonData)
129134
return nil
@@ -198,7 +203,7 @@ func (g *manager) GetResults(ctx context.Context, id string) (string, error) {
198203
to,
199204
id,
200205
gadgetcontext.WithDataOperators(
201-
outputDataOperator(func(data []byte) {
206+
g.outputDataOperator(func(data []byte) {
202207
results.Write(data)
203208
results.WriteByte('\n')
204209
}),

0 commit comments

Comments
 (0)