]> Sergey Matveev's repositories - btrtrc.git/blobdiff - torrent.go
Merge branch 'request-strategy-rewrite'
[btrtrc.git] / torrent.go
index 41460412cc81dafa9f47745c0f7d8b74e05ec3be..b4dda85d740acbb6e275e6f116187d762f6f4241 100644 (file)
@@ -872,10 +872,20 @@ func (t *Torrent) pieceLength(piece pieceIndex) pp.Integer {
 }
 
 func (t *Torrent) hashPiece(piece pieceIndex) (ret metainfo.Hash, err error) {
-       hash := pieceHash.New()
        p := t.piece(piece)
        p.waitNoPendingWrites()
        storagePiece := t.pieces[piece].Storage()
+
+       //Does the backend want to do its own hashing?
+       if i, ok := storagePiece.PieceImpl.(storage.SelfHashing); ok {
+               var sum metainfo.Hash
+               //log.Printf("A piece decided to self-hash: %d", piece)
+               sum, err = i.SelfHash()
+               missinggo.CopyExact(&ret, sum)
+               return
+       }
+
+       hash := pieceHash.New()
        const logPieceContents = false
        if logPieceContents {
                var examineBuf bytes.Buffer