Changeset a71e8fa


Ignore:
Timestamp:
Sep 28, 2012 7:25:31 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
4667788
Parents:
f58bf30
Message:
  • i2psnark:
    • Fix bugs in rarest-first tracking
    • Fix requesting of partial piece when there are multiple seeds
    • Synch fix in BitField?
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • apps/i2psnark/java/src/org/klomp/snark/BitField.java

    rf58bf30 ra71e8fa  
    4040    int arraysize = ((size-1)/8)+1;
    4141    bitfield = new byte[arraysize];
    42     this.count = 0;
    4342  }
    4443
     
    10099    int index = bit/8;
    101100    int mask = 128 >> (bit % 8);
    102     if ((bitfield[index] & mask) == 0) {
    103       count++;
    104       bitfield[index] |= mask;
     101    synchronized(this) {
     102        if ((bitfield[index] & mask) == 0) {
     103            count++;
     104            bitfield[index] |= mask;
     105        }
    105106    }
    106107  }
  • apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java

    rf58bf30 ra71e8fa  
    650650      listener.peerChange(this, peer);
    651651
    652     synchronized(wantedPieces)
    653       {
    654         return wantedPieces.contains(new Piece(piece));
    655       }
     652    synchronized(wantedPieces) {
     653        for (Piece pc : wantedPieces) {
     654            if (pc.getId() == piece) {
     655                pc.addPeer(peer);
     656                return true;
     657            }
     658        }
     659        return false;
     660    }
    656661  }
    657662
     
    665670      listener.peerChange(this, peer);
    666671
    667     synchronized(wantedPieces)
    668       {
    669         Iterator<Piece> it = wantedPieces.iterator();
    670         while (it.hasNext())
    671           {
    672             Piece p = it.next();
     672    boolean rv = false;
     673    synchronized(wantedPieces) {
     674        for (Piece p : wantedPieces) {
    673675            int i = p.getId();
    674676            if (bitfield.get(i)) {
    675677              p.addPeer(peer);
    676               return true;
     678              rv = true;
    677679            }
    678           }
    679       }
    680     return false;
     680        }
     681    }
     682    return rv;
    681683  }
    682684
     
    10781080  public void removePeerFromPieces(Peer peer) {
    10791081      synchronized(wantedPieces) {
    1080           for(Iterator<Piece> iter = wantedPieces.iterator(); iter.hasNext(); ) {
    1081               Piece piece = iter.next();
     1082          for (Piece piece : wantedPieces) {
    10821083              piece.removePeer(peer);
    10831084          }
     
    11731174                     if (piece.getId() == savedPiece) {
    11741175                         if (peer.isCompleted() && piece.getPeerCount() > 1) {
    1175                              // Try to preserve rarest-first when we have only one seeder
    1176                              // by not preferring a partial piece that others have too
     1176                             // Try to preserve rarest-first
     1177                             // by not requesting a partial piece that non-seeders also have
    11771178                             // from a seeder
    1178                              skipped = true;
    1179                              break;
     1179                             boolean nonSeeds = false;
     1180                             for (Peer pr : peers) {
     1181                                 PeerState state = pr.state;
     1182                                 if (state == null) continue;
     1183                                 BitField bf = state.bitfield;
     1184                                 if (bf == null) continue;
     1185                                 if (bf.get(savedPiece) && !pr.isCompleted()) {
     1186                                     nonSeeds = true;
     1187                                     break;
     1188                                 }
     1189                             }
     1190                             if (nonSeeds) {
     1191                                 skipped = true;
     1192                                 break;
     1193                             }
    11801194                         }
    11811195                         iter.remove();
  • apps/i2psnark/java/src/org/klomp/snark/Piece.java

    rf58bf30 ra71e8fa  
    1919    public Piece(int id) {
    2020        this.id = id;
    21         this.peers = new HashSet(I2PSnarkUtil.MAX_CONNECTIONS);
     21        this.peers = new HashSet(I2PSnarkUtil.MAX_CONNECTIONS / 2);
    2222        // defer creating requests to save memory
    2323    }
  • history.txt

    rf58bf30 ra71e8fa  
     12012-09-28 zzz
     2 * i2psnark:
     3   - Fix bugs in rarest-first tracking
     4   - Fix requesting of partial piece when there are multiple seeds
     5   - Synch fix in BitField
     6 * i2ptunnel: Fix wrong server IP in log message
     7 * peers.jsp: Remove SSU "Dev" column
     8 * SessionKeyManager: Store original tagset size for debugging
     9 * Streaming: Don't send RST on globally-blackisted conns
     10
    1112012-09-26 zzz
    212 * Addresses: Reject numeric IPs of the form n, n.n, and n.n.n
  • router/java/src/net/i2p/router/RouterVersion.java

    rf58bf30 ra71e8fa  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 3;
     21    public final static long BUILD = 4;
    2222
    2323    /** for example "-test" */
Note: See TracChangeset for help on using the changeset viewer.