]> Cypherpunks.ru repositories - nncp.git/commitdiff
Prevent possible race and failing of fullsize determining
authorSergey Matveev <stargrave@stargrave.org>
Fri, 20 Dec 2019 08:07:21 +0000 (11:07 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 22 Dec 2019 11:49:43 +0000 (14:49 +0300)
src/sp.go

index 2aebb07b381e668c2bcebea3544a8f2fc86af24d..20da35636963df7fa0f58caa6f0fde720efbd507 100644 (file)
--- a/src/sp.go
+++ b/src/sp.go
@@ -907,19 +907,23 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) {
                                fd.Close()
                                return nil, err
                        }
-                       ourSize := file.Offset + uint64(len(file.Payload))
+                       ourSize := int64(file.Offset + uint64(len(file.Payload)))
+                       sdsp["size"] = ourSize
+                       fullsize := int64(0)
                        state.RLock()
-                       sdsp["size"] = int64(ourSize)
-                       sdsp["fullsize"] = int64(state.infosTheir[*file.Hash].Size)
+                       infoTheir, ok := state.infosTheir[*file.Hash]
+                       state.RUnlock()
+                       if ok {
+                               fullsize = int64(infoTheir.Size)
+                       }
+                       sdsp["fullsize"] = fullsize
                        if state.Ctx.ShowPrgrs {
                                Progress("Rx", sdsp)
                        }
-                       if state.infosTheir[*file.Hash].Size != ourSize {
-                               state.RUnlock()
+                       if fullsize != ourSize {
                                fd.Close()
                                continue
                        }
-                       state.RUnlock()
                        spWorkersGroup.Wait()
                        spWorkersGroup.Add(1)
                        go func() {