// Record that we have the chunk.
        piece.unpendChunkIndex(chunkIndex(req.chunkSpec, t.chunkSize))
        delete(t.urgent, req)
+       // It's important that the piece is potentially queued before we check if
+       // the piece is still wanted, because if it is queued, it won't be wanted.
        if piece.numPendingChunks() == 0 {
+               me.queuePieceCheck(t, req.Index)
+       }
+       if !t.wantPiece(int(req.Index)) {
                for _, c := range t.Conns {
                        c.pieceRequestOrder.DeletePiece(int(req.Index))
                }
-               me.queuePieceCheck(t, req.Index)
        }
 
        // Cancel pending requests for this chunk.