@@ -169,7 +169,7 @@ func SetGoMemLimitWithOpts(opts ...Option) (_ int64, _err error) {
169
169
170
170
// set the memory limit and start refresh
171
171
limit , err := updateGoMemLimit (uint64 (snapshot ), provider , cfg .logger )
172
- go refresh (provider , cfg .logger , cfg .refresh )
172
+ refresh (provider , cfg .logger , cfg .refresh )
173
173
if err != nil {
174
174
if errors .Is (err , ErrNoLimit ) {
175
175
cfg .logger .Info ("memory is not limited, skipping" )
@@ -200,7 +200,7 @@ func updateGoMemLimit(currLimit uint64, provider Provider, logger *slog.Logger)
200
200
return newLimit , nil
201
201
}
202
202
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.
204
204
// See more details in the documentation of WithRefreshInterval.
205
205
func refresh (provider Provider , logger * slog.Logger , refresh time.Duration ) {
206
206
if refresh == 0 {
@@ -210,22 +210,24 @@ func refresh(provider Provider, logger *slog.Logger, refresh time.Duration) {
210
210
provider = noErrNoLimitProvider (provider )
211
211
212
212
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
+ }()
219
226
if err != nil {
220
- return err
227
+ logger . Error ( "failed to refresh GOMEMLIMIT" , slog . Any ( "error" , err ))
221
228
}
222
-
223
- return nil
224
- }()
225
- if err != nil {
226
- logger .Error ("failed to refresh GOMEMLIMIT" , slog .Any ("error" , err ))
227
229
}
228
- }
230
+ }()
229
231
}
230
232
231
233
// rollbackOnPanic rollbacks to the snapshot on panic.
0 commit comments