Skip to content

Commit b2c01e8

Browse files
committed
fix(memlimit): move goroutine execution inside refresh function
1 parent a9a712b commit b2c01e8

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

memlimit/memlimit.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func SetGoMemLimitWithOpts(opts ...Option) (_ int64, _err error) {
169169

170170
// set the memory limit and start refresh
171171
limit, err := updateGoMemLimit(uint64(snapshot), provider, cfg.logger)
172-
go refresh(provider, cfg.logger, cfg.refresh)
172+
refresh(provider, cfg.logger, cfg.refresh)
173173
if err != nil {
174174
if errors.Is(err, ErrNoLimit) {
175175
cfg.logger.Info("memory is not limited, skipping")
@@ -200,7 +200,7 @@ func updateGoMemLimit(currLimit uint64, provider Provider, logger *slog.Logger)
200200
return newLimit, nil
201201
}
202202

203-
// refresh periodically fetches the memory limit from the provider and reapplies it if it has changed.
203+
// refresh spawns a goroutine that runs every refresh duration and updates the GOMEMLIMIT if it has changed.
204204
// See more details in the documentation of WithRefreshInterval.
205205
func refresh(provider Provider, logger *slog.Logger, refresh time.Duration) {
206206
if refresh == 0 {
@@ -210,22 +210,24 @@ func refresh(provider Provider, logger *slog.Logger, refresh time.Duration) {
210210
provider = noErrNoLimitProvider(provider)
211211

212212
t := time.NewTicker(refresh)
213-
for range t.C {
214-
err := func() (_err error) {
215-
snapshot := debug.SetMemoryLimit(-1)
216-
defer rollbackOnPanic(logger, snapshot, &_err)
217-
218-
_, err := updateGoMemLimit(uint64(snapshot), provider, logger)
213+
go func() {
214+
for range t.C {
215+
err := func() (_err error) {
216+
snapshot := debug.SetMemoryLimit(-1)
217+
defer rollbackOnPanic(logger, snapshot, &_err)
218+
219+
_, err := updateGoMemLimit(uint64(snapshot), provider, logger)
220+
if err != nil {
221+
return err
222+
}
223+
224+
return nil
225+
}()
219226
if err != nil {
220-
return err
227+
logger.Error("failed to refresh GOMEMLIMIT", slog.Any("error", err))
221228
}
222-
223-
return nil
224-
}()
225-
if err != nil {
226-
logger.Error("failed to refresh GOMEMLIMIT", slog.Any("error", err))
227229
}
228-
}
230+
}()
229231
}
230232

231233
// rollbackOnPanic rollbacks to the snapshot on panic.

0 commit comments

Comments
 (0)