From 5a30c8428b1e83076fb072e92d22c4229b1128ce Mon Sep 17 00:00:00 2001 From: yourok <8yourok8@mail.ru> Date: Thu, 4 Oct 2018 21:33:32 +0300 Subject: [PATCH] fix crash on preload --- src/server/torr/storage/memcache/Buffer.go | 12 ++++++++++++ src/server/torr/storage/memcache/Cache.go | 7 +------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/server/torr/storage/memcache/Buffer.go b/src/server/torr/storage/memcache/Buffer.go index a631df7..52331c4 100644 --- a/src/server/torr/storage/memcache/Buffer.go +++ b/src/server/torr/storage/memcache/Buffer.go @@ -81,6 +81,18 @@ func (b *BufferPool) ReleaseBuffer(index int) { } } +func (b *BufferPool) Used() map[int]struct{} { + used := make(map[int]struct{}) + b.mu.Lock() + defer b.mu.Unlock() + for _, b := range b.buffs { + if b.used { + used[b.pieceId] = struct{}{} + } + } + return used +} + func (b *BufferPool) Len() int { return b.frees } diff --git a/src/server/torr/storage/memcache/Cache.go b/src/server/torr/storage/memcache/Cache.go index bf15da9..46ebb3e 100644 --- a/src/server/torr/storage/memcache/Cache.go +++ b/src/server/torr/storage/memcache/Cache.go @@ -149,12 +149,7 @@ func (c *Cache) getRemPieces() []*Piece { pieces := make([]*Piece, 0) fill := int64(0) loading := 0 - used := make(map[int]struct{}) - for _, b := range c.bufferPull.buffs { - if b.used { - used[b.pieceId] = struct{}{} - } - } + used := c.bufferPull.Used() for u := range used { v := c.pieces[u] if v.Size > 0 {