Skip to content

Commit 763fa44

Browse files
authored
fix(responseassembler): dont hold block data reference in passed on subscribed block link (#268)
1 parent 695492e commit 763fa44

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

responsemanager/responseassembler/responseBuilder.go

+30-11
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type responseBuilder struct {
2828
func (rb *responseBuilder) SendResponse(link ipld.Link, data []byte) graphsync.BlockData {
2929
op := rb.setupBlockOperation(link, data)
3030
rb.operations = append(rb.operations, op)
31-
return op
31+
return op.Block()
3232
}
3333

3434
func (rb *responseBuilder) SendExtensionData(extension graphsync.ExtensionData) {
@@ -128,25 +128,44 @@ func (bo blockOperation) build(builder *gsmsg.Builder) {
128128
builder.AddLink(bo.requestID, bo.link, bo.data != nil)
129129
}
130130

131-
func (bo blockOperation) Link() ipld.Link {
131+
func (bo blockOperation) size() uint64 {
132+
if !bo.sendBlock {
133+
return 0
134+
}
135+
return uint64(len(bo.data))
136+
}
137+
138+
func (bo blockOperation) Block() blockQueued {
139+
return blockQueued{
140+
sendBlock: bo.sendBlock,
141+
link: bo.link,
142+
index: bo.index,
143+
size: uint64(len(bo.data)),
144+
}
145+
}
146+
147+
type blockQueued struct {
148+
sendBlock bool
149+
link ipld.Link
150+
index int64
151+
size uint64
152+
}
153+
154+
func (bo blockQueued) Link() ipld.Link {
132155
return bo.link
133156
}
134157

135-
func (bo blockOperation) BlockSize() uint64 {
136-
return uint64(len(bo.data))
158+
func (bo blockQueued) BlockSize() uint64 {
159+
return bo.size
137160
}
138161

139-
func (bo blockOperation) BlockSizeOnWire() uint64 {
162+
func (bo blockQueued) BlockSizeOnWire() uint64 {
140163
if !bo.sendBlock {
141164
return 0
142165
}
143-
return bo.BlockSize()
166+
return bo.size
144167
}
145168

146-
func (bo blockOperation) Index() int64 {
169+
func (bo blockQueued) Index() int64 {
147170
return bo.index
148171
}
149-
150-
func (bo blockOperation) size() uint64 {
151-
return bo.BlockSizeOnWire()
152-
}

0 commit comments

Comments
 (0)