Changeset 7efb0fa7


Ignore:
Timestamp:
Oct 29, 2010 5:32:05 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
9baa6e7
Parents:
571ad83
Message:
  • i2psnark:
    • Priority mapping bugfix
    • Close files as we go when creating/checking so we don't run out of file descriptors
File:
1 edited

Legend:

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

    r571ad83 r7efb0fa7  
    423423              long oldFileEnd = fileEnd;
    424424              fileEnd += lengths[file];
    425               if (priorities[file] > pri && pcEnd < oldFileEnd)
     425              if (priorities[file] > pri && oldFileEnd < pcEnd)
    426426                  pri = priorities[file];
    427427          }
     
    670670          synchronized(RAFlock[i]) {
    671671              allocateFile(i);
     672              // close as we go so we don't run out of file descriptors
     673              try {
     674                  closeRAF(i);
     675              } catch (IOException ioe) {}
    672676          }
    673677        } else {
     
    678682              checkRAF(i);
    679683              rafs[i].setLength(lengths[i]);
    680           }
    681           // will be closed below
     684              try {
     685                  closeRAF(i);
     686              } catch (IOException ioe) {}
     687          }
    682688        }
    683689      }
     
    688694        pieces = metainfo.getPieces();
    689695        byte[] piece = new byte[metainfo.getPieceLength(0)];
     696        int file = 0;
     697        long fileEnd = lengths[0];
     698        long pieceEnd = 0;
    690699        for (int i = 0; i < pieces; i++)
    691700          {
    692701            int length = getUncheckedPiece(i, piece);
    693702            boolean correctHash = metainfo.checkPiece(i, piece, 0, length);
     703            // close as we go so we don't run out of file descriptors
     704            pieceEnd += length;
     705            while (fileEnd <= pieceEnd) {
     706                synchronized(RAFlock[file]) {
     707                    try {
     708                        closeRAF(file);
     709                    } catch (IOException ioe) {}
     710                }
     711                if (++file >= rafs.length)
     712                    break;
     713                fileEnd += lengths[file];
     714            }
    694715            if (correctHash)
    695716              {
     
    706727    // close all the files so we don't end up with a zillion open ones;
    707728    // we will reopen as needed
    708     for (int i = 0; i < rafs.length; i++) {
    709       synchronized(RAFlock[i]) {
    710         try {
    711           closeRAF(i);
    712         } catch (IOException ioe) {}
    713       }
    714     }
     729    // Now closed above to avoid running out of file descriptors
     730    //for (int i = 0; i < rafs.length; i++) {
     731    //  synchronized(RAFlock[i]) {
     732    //    try {
     733    //      closeRAF(i);
     734    //    } catch (IOException ioe) {}
     735    //  }
     736    //}
    715737
    716738    if (listener != null) {
     
    721743  }
    722744
     745  /** this calls openRAF(); caller must synnchronize and call closeRAF() */
    723746  private void allocateFile(int nr) throws IOException
    724747  {
Note: See TracChangeset for help on using the changeset viewer.