|
|
@ -57,7 +57,6 @@ func (cw *ChunkedStreamWriter) WriteAt(p []byte, off int64) (n int, err error) { |
|
|
|
if memChunk.usage.IsComplete(cw.ChunkSize) { |
|
|
|
if cw.saveToStorageFn != nil { |
|
|
|
cw.saveOneChunk(memChunk, logicChunkIndex) |
|
|
|
delete(cw.activeChunks, logicChunkIndex) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -92,7 +91,6 @@ func (cw *ChunkedStreamWriter) FlushAll() { |
|
|
|
for logicChunkIndex, memChunk := range cw.activeChunks { |
|
|
|
if cw.saveToStorageFn != nil { |
|
|
|
cw.saveOneChunk(memChunk, logicChunkIndex) |
|
|
|
delete(cw.activeChunks, logicChunkIndex) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -102,6 +100,7 @@ func (cw *ChunkedStreamWriter) saveOneChunk(memChunk *MemChunk, logicChunkIndex |
|
|
|
for t := memChunk.usage.head.next; t != memChunk.usage.tail; t = t.next { |
|
|
|
reader := util.NewBytesReader(memChunk.buf[t.StartOffset:t.stopOffset]) |
|
|
|
cw.saveToStorageFn(reader, int64(logicChunkIndex)*cw.ChunkSize+t.StartOffset, t.Size(), func() { |
|
|
|
delete(cw.activeChunks, logicChunkIndex) |
|
|
|
atomic.AddInt32(&referenceCounter, -1) |
|
|
|
if atomic.LoadInt32(&referenceCounter) == 0 { |
|
|
|
mem.Free(memChunk.buf) |
|
|
@ -110,8 +109,8 @@ func (cw *ChunkedStreamWriter) saveOneChunk(memChunk *MemChunk, logicChunkIndex |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Reset releases used resources
|
|
|
|
func (cw *ChunkedStreamWriter) Reset() { |
|
|
|
// Destroy releases used resources
|
|
|
|
func (cw *ChunkedStreamWriter) Destroy() { |
|
|
|
for t, memChunk := range cw.activeChunks { |
|
|
|
mem.Free(memChunk.buf) |
|
|
|
delete(cw.activeChunks, t) |
|
|
|