aboutsummaryrefslogtreecommitdiff
path: root/go/storage
diff options
context:
space:
mode:
Diffstat (limited to 'go/storage')
-rw-r--r--go/storage/needle_byte_cache.go4
-rw-r--r--go/storage/needle_read_write.go2
-rw-r--r--go/storage/volume.go3
3 files changed, 5 insertions, 4 deletions
diff --git a/go/storage/needle_byte_cache.go b/go/storage/needle_byte_cache.go
index d39ed23c4..5db0f8895 100644
--- a/go/storage/needle_byte_cache.go
+++ b/go/storage/needle_byte_cache.go
@@ -66,7 +66,9 @@ func getBytesForFileBlock(r *os.File, offset int64, readSize int) (dataSlice []b
}
func (n *Needle) ReleaseMemory() {
- n.rawBlock.decreaseReference()
+ if n.rawBlock != nil {
+ n.rawBlock.decreaseReference()
+ }
}
func ReleaseBytes(b []byte) {
bytesPool.Put(b)
diff --git a/go/storage/needle_read_write.go b/go/storage/needle_read_write.go
index 49ae4fee4..fcca2469c 100644
--- a/go/storage/needle_read_write.go
+++ b/go/storage/needle_read_write.go
@@ -144,10 +144,10 @@ func ReadNeedleBlob(r *os.File, offset int64, size uint32) (dataSlice []byte, bl
func (n *Needle) ReadData(r *os.File, offset int64, size uint32, version Version) (err error) {
bytes, block, err := ReadNeedleBlob(r, offset, size)
- n.rawBlock = block
if err != nil {
return err
}
+ n.rawBlock = block
n.ParseNeedleHeader(bytes)
if n.Size != size {
return fmt.Errorf("File Entry Not Found. Needle %d Memory %d", n.Size, size)
diff --git a/go/storage/volume.go b/go/storage/volume.go
index af552a10f..7e330a9e4 100644
--- a/go/storage/volume.go
+++ b/go/storage/volume.go
@@ -159,11 +159,11 @@ func (v *Volume) isFileUnchanged(n *Needle) bool {
if ok && nv.Offset > 0 {
oldNeedle := new(Needle)
err := oldNeedle.ReadData(v.dataFile, int64(nv.Offset)*NeedlePaddingSize, nv.Size, v.Version())
- defer oldNeedle.ReleaseMemory()
if err != nil {
glog.V(0).Infof("Failed to check updated file %v", err)
return false
}
+ defer oldNeedle.ReleaseMemory()
if oldNeedle.Checksum == n.Checksum && bytes.Equal(oldNeedle.Data, n.Data) {
n.DataSize = oldNeedle.DataSize
return true
@@ -289,7 +289,6 @@ func (v *Volume) readNeedle(n *Needle) (int, error) {
}
err := n.ReadData(v.dataFile, int64(nv.Offset)*NeedlePaddingSize, nv.Size, v.Version())
if err != nil {
- n.ReleaseMemory()
return 0, err
}
bytesRead := len(n.Data)