Skip to content

Commit d8542b1

Browse files
committed
added pool for internal maps
Signed-off-by: Frederic BIDON <[email protected]>
1 parent 5c7759f commit d8542b1

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

schema.go

+36-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package spec
1717
import (
1818
"fmt"
1919
"strings"
20+
"sync"
2021

2122
"github.com/go-openapi/jsonpointer"
2223
"github.com/go-openapi/swag"
@@ -131,7 +132,10 @@ func (r SchemaURL) MarshalJSON() ([]byte, error) {
131132

132133
// UnmarshalJSON unmarshal this from JSON
133134
func (r *SchemaURL) UnmarshalJSON(data []byte) error {
134-
var v map[string]interface{}
135+
v := poolOfMaps.BorrowMap()
136+
defer func() {
137+
poolOfMaps.RedeemMap(v)
138+
}()
135139
if err := json.Unmarshal(data, &v); err != nil {
136140
return err
137141
}
@@ -610,7 +614,11 @@ func (s *Schema) UnmarshalJSON(data []byte) error {
610614
SwaggerSchemaProps: props.SwaggerSchemaProps,
611615
}
612616

613-
var d map[string]interface{}
617+
//var d map[string]interface{}
618+
d := poolOfMaps.BorrowMap()
619+
defer func() {
620+
poolOfMaps.RedeemMap(d)
621+
}()
614622
if err := json.Unmarshal(data, &d); err != nil {
615623
return err
616624
}
@@ -643,3 +651,29 @@ func (s *Schema) UnmarshalJSON(data []byte) error {
643651

644652
return nil
645653
}
654+
655+
type mapPool struct {
656+
*sync.Pool
657+
}
658+
659+
var poolOfMaps = mapPool{
660+
Pool: &sync.Pool{
661+
New: func() any {
662+
return make(map[string]any)
663+
},
664+
},
665+
}
666+
667+
func (p mapPool) BorrowMap() map[string]any {
668+
m := p.Get().(map[string]any)
669+
// go1.21 clear(m)
670+
for k := range m {
671+
delete(m, k)
672+
}
673+
674+
return m
675+
}
676+
677+
func (p mapPool) RedeemMap(m map[string]any) {
678+
p.Put(m)
679+
}

0 commit comments

Comments
 (0)