[freenet-cvs] r11976 - trunk/freenet/src/freenet/client/async

toad at freenetproject.org toad at freenetproject.org
Tue Mar 6 01:34:21 UTC 2007


Author: toad
Date: 2007-03-05 20:48:42 +0000 (Mon, 05 Mar 2007)
New Revision: 11976

Modified:
   trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
Log:
Synchronization

Modified: trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java	2007-03-05 20:45:12 UTC (rev 11975)
+++ trunk/freenet/src/freenet/client/async/SplitFileFetcherSegment.java	2007-03-05 20:48:42 UTC (rev 11976)
@@ -137,8 +137,10 @@
 		return fatallyFailedBlocks;
 	}
 
-	public synchronized void onSuccess(FetchResult result, int blockNo, boolean dontNotify) {
+	public void onSuccess(FetchResult result, int blockNo, boolean dontNotify) {
+		boolean decodeNow = false;
 		logMINOR = Logger.shouldLog(Logger.MINOR, this);
+		synchronized(this) {
 		if(isFinished()) return;
 		if(blockNo < dataKeys.length) {
 			if(dataKeys[blockNo] == null) {
@@ -158,24 +160,22 @@
 		} else
 			Logger.error(this, "Unrecognized block number: "+blockNo, new Exception("error"));
 		fetchedBlocks++;
-		parentFetcher.parent.completedBlock(dontNotify);
 		if(logMINOR) Logger.minor(this, "Fetched "+fetchedBlocks+" blocks in onSuccess("+blockNo+")");
-		if(fetchedBlocks >= minFetched)
-			startDecode();
-	}
-
-	private void startDecode() {
-		synchronized(this) {
-			if(startedDecode) return;
+		if(startedDecode) {
+			return;
+		} else {
+			decodeNow = (fetchedBlocks >= minFetched);
 			startedDecode = true;
 			finishing = true;
 		}
+		}
+		parentFetcher.parent.completedBlock(dontNotify);
 		Runnable r = new Decoder();
 		Thread t = new Thread(r, "Decoder for "+this);
 		t.setDaemon(true);
 		t.start();
 	}
-	
+
 	class Decoder implements Runnable {
 
 		public void run() {




More information about the cvs mailing list