Skip to content

Commit 848b15f

Browse files
committed
use sync.Map :(
1 parent 4f31098 commit 848b15f

2 files changed

Lines changed: 12 additions & 21 deletions

File tree

x/tx/signing/context.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package signing
33
import (
44
"errors"
55
"fmt"
6+
"sync"
67

78
cosmos_proto "github.com/cosmos/cosmos-proto"
89
gogoproto "github.com/cosmos/gogoproto/proto"
@@ -29,7 +30,7 @@ type Context struct {
2930
typeResolver protoregistry.MessageTypeResolver
3031
addressCodec address.Codec
3132
validatorAddressCodec address.Codec
32-
getSignersFuncs map[protoreflect.FullName]GetSignersFunc
33+
getSignersFuncs sync.Map
3334
customGetSignerFuncs map[protoreflect.FullName]GetSignersFunc
3435
maxRecursionDepth int
3536
}
@@ -110,7 +111,7 @@ func NewContext(options Options) (*Context, error) {
110111
typeResolver: protoTypes,
111112
addressCodec: options.AddressCodec,
112113
validatorAddressCodec: options.ValidatorAddressCodec,
113-
getSignersFuncs: map[protoreflect.FullName]GetSignersFunc{},
114+
getSignersFuncs: sync.Map{},
114115
customGetSignerFuncs: customGetSignerFuncs,
115116
maxRecursionDepth: options.MaxRecursionDepth,
116117
}
@@ -338,14 +339,17 @@ func (c *Context) getGetSignersFn(messageDescriptor protoreflect.MessageDescript
338339
if ok {
339340
return f, nil
340341
}
341-
f, ok = c.getSignersFuncs[messageDescriptor.FullName()]
342+
343+
loadedFn, ok := c.getSignersFuncs.Load(messageDescriptor.FullName())
342344
if !ok {
343345
var err error
344346
f, err = c.makeGetSignersFunc(messageDescriptor)
345347
if err != nil {
346348
return nil, err
347349
}
348-
c.getSignersFuncs[messageDescriptor.FullName()] = f
350+
c.getSignersFuncs.Store(messageDescriptor.FullName(), f)
351+
} else {
352+
f = loadedFn.(GetSignersFunc)
349353
}
350354

351355
return f, nil

x/tx/signing/context_test.go

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,12 @@ func TestGetGetSignersFnConcurrent(t *testing.T) {
5858
})
5959
require.NoError(t, err)
6060

61-
msg := &bankv1beta1.MsgSend{
62-
FromAddress: hex.EncodeToString([]byte("foo")),
63-
}
64-
65-
desc := msg.ProtoReflect().Descriptor()
66-
67-
// err = ctx.Validate()
68-
// require.NoError(t, err)
69-
70-
for i := 0; i < 100; i++ {
61+
desc := (&testpb.RepeatedSigner{}).ProtoReflect().Descriptor()
62+
for i := 0; i < 50; i++ {
7163
go func() {
7264
_, _ = ctx.getGetSignersFn(desc)
7365
}()
7466
}
75-
76-
// signers, err := fn(msg)
77-
// require.NoError(t, err)
78-
// require.Equal(t, [][]byte{[]byte("foo")}, signers)
7967
}
8068

8169
func TestGetSigners(t *testing.T) {
@@ -277,9 +265,8 @@ func TestDefineCustomGetSigners(t *testing.T) {
277265
options.DefineCustomGetSigners(proto.MessageName(simpleSigner), func(msg proto.Message) ([][]byte, error) {
278266
return [][]byte{[]byte("qux")}, nil
279267
})
280-
context, err = NewContext(options)
281-
require.NoError(t, err)
282-
require.ErrorContains(t, context.Validate(), "a custom signer function as been defined for message SimpleSigner")
268+
_, err = NewContext(options)
269+
require.ErrorContains(t, err, "a custom signer function as been defined for message SimpleSigner")
283270
}
284271

285272
type dummyAddressCodec struct{}

0 commit comments

Comments
 (0)