Skip to content

Commit 11ad065

Browse files
authored
imporve: use sync map to store handlers (#125)
1 parent 0d1b1c9 commit 11ad065

File tree

4 files changed

+10
-306
lines changed

4 files changed

+10
-306
lines changed

internal/map32/map32.go

-154
This file was deleted.

internal/map32/map32_test.go

-114
This file was deleted.

internal/map32/types.go.go

-15
This file was deleted.

internal/socket/duplex.go

+10-23
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"github.com/rsocket/rsocket-go/internal/bytesconv"
1919
"github.com/rsocket/rsocket-go/internal/common"
2020
"github.com/rsocket/rsocket-go/internal/fragmentation"
21-
"github.com/rsocket/rsocket-go/internal/map32"
2221
"github.com/rsocket/rsocket-go/internal/misc"
2322
"github.com/rsocket/rsocket-go/internal/queue"
2423
"github.com/rsocket/rsocket-go/lease"
@@ -60,10 +59,10 @@ type DuplexConnection struct {
6059
sndQueue chan core.WriteableFrame
6160
sndBacklog []core.WriteableFrame
6261
responder Responder
63-
messages map32.Map32 // key=streamID, value=callback
62+
messages sync.Map // key=streamID, value=callback
6463
sids StreamID
6564
mtu int
66-
fragments map32.Map32 // key=streamID, value=Joiner
65+
fragments sync.Map // key=streamID, value=Joiner
6766
writeDone chan struct{}
6867
keepaliver *Keepaliver
6968
cond sync.Cond
@@ -162,11 +161,10 @@ func (dc *DuplexConnection) destroyTransport() {
162161
}
163162

164163
func (dc *DuplexConnection) destroyHandler(err error) {
165-
defer dc.messages.Destroy()
166164
// TODO: optimize callback map
167165
var callbacks []callback
168-
dc.messages.Range(func(sid uint32, v interface{}) bool {
169-
callbacks = append(callbacks, v.(callback))
166+
dc.messages.Range(func(_, value interface{}) bool {
167+
callbacks = append(callbacks, value.(callback))
170168
return true
171169
})
172170
for _, next := range callbacks {
@@ -175,11 +173,10 @@ func (dc *DuplexConnection) destroyHandler(err error) {
175173
}
176174

177175
func (dc *DuplexConnection) destroyFragment() {
178-
dc.fragments.Range(func(u uint32, i interface{}) bool {
176+
dc.fragments.Range(func(_, i interface{}) bool {
179177
common.TryRelease(i)
180178
return true
181179
})
182-
dc.fragments.Destroy()
183180
}
184181

185182
func (dc *DuplexConnection) destroySndQueue() {
@@ -1360,21 +1357,11 @@ func newDuplexConnection(ctx context.Context, reqSche, resSche scheduler.Schedul
13601357
leases: leases,
13611358
sndQueue: make(chan core.WriteableFrame, _outChanSize),
13621359
mtu: mtu,
1363-
messages: map32.New(map32.WithCap(32), map32.WithHasher(func(key uint32, _ int) int {
1364-
var n int
1365-
if key&1 == 0 {
1366-
n = int(key) >> 1
1367-
} else {
1368-
n = (int(key)-1)>>1 + 1
1369-
}
1370-
return n & 31
1371-
})),
1372-
sids: sids,
1373-
fragments: map32.New(map32.WithCap(1)),
1374-
counter: core.NewTrafficCounter(),
1375-
keepaliver: ka,
1376-
closed: atomic.NewBool(false),
1377-
ready: atomic.NewBool(false),
1360+
sids: sids,
1361+
counter: core.NewTrafficCounter(),
1362+
keepaliver: ka,
1363+
closed: atomic.NewBool(false),
1364+
ready: atomic.NewBool(false),
13781365
}
13791366

13801367
c.cond.L = &c.locker

0 commit comments

Comments
 (0)