Skip to content

Commit de6a1ed

Browse files
MarcoPologammazero
authored andcommitted
fix: Drop stream references on Close/Reset
Lets connections get GC'd sooner (possibly before the streamMessageSender is GC'd)
1 parent 2a5c7d0 commit de6a1ed

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

bitswap/network/ipfs_impl.go

+28-14
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,21 @@ type impl struct {
8383
}
8484

8585
type streamMessageSender struct {
86-
to peer.ID
87-
stream network.Stream
88-
connected bool
89-
bsnet *impl
90-
opts *MessageSenderOpts
86+
to peer.ID
87+
stream network.Stream
88+
bsnet *impl
89+
opts *MessageSenderOpts
90+
}
91+
92+
type HasContext interface {
93+
Context() context.Context
9194
}
9295

9396
// Open a stream to the remote peer
9497
func (s *streamMessageSender) Connect(ctx context.Context) (network.Stream, error) {
95-
if s.connected {
96-
return s.stream, nil
98+
stream := s.stream
99+
if stream != nil {
100+
return stream, nil
97101
}
98102

99103
tctx, cancel := context.WithTimeout(ctx, s.opts.SendTimeout)
@@ -109,28 +113,38 @@ func (s *streamMessageSender) Connect(ctx context.Context) (network.Stream, erro
109113
}
110114

111115
s.stream = stream
112-
s.connected = true
113-
return s.stream, nil
116+
return stream, nil
114117
}
115118

116119
// Reset the stream
117120
func (s *streamMessageSender) Reset() error {
118-
if s.stream != nil {
119-
err := s.stream.Reset()
120-
s.connected = false
121+
stream := s.stream
122+
if stream != nil {
123+
err := stream.Reset()
124+
s.stream = nil
121125
return err
122126
}
123127
return nil
124128
}
125129

126130
// Close the stream
127131
func (s *streamMessageSender) Close() error {
128-
return s.stream.Close()
132+
stream := s.stream
133+
if stream != nil {
134+
err := stream.Close()
135+
s.stream = nil
136+
return err
137+
}
138+
return nil
129139
}
130140

131141
// Indicates whether the peer supports HAVE / DONT_HAVE messages
132142
func (s *streamMessageSender) SupportsHave() bool {
133-
return s.bsnet.SupportsHave(s.stream.Protocol())
143+
stream := s.stream
144+
if stream == nil {
145+
return false
146+
}
147+
return s.bsnet.SupportsHave(stream.Protocol())
134148
}
135149

136150
// Send a message to the peer, attempting multiple times

0 commit comments

Comments
 (0)