Author: toad
Date: 2006-09-29 20:35:03 +0000 (Fri, 29 Sep 2006)
New Revision: 10577
Modified:
trunk/freenet/src/freenet/client/async/BackgroundBlockEncoder.java
trunk/freenet/src/freenet/client/async/SingleFileInserter.java
trunk/freenet/src/freenet/client/async/SplitFileInserter.java
trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java
Log:
Fix URIGenerated / PutFetchable. Bugs in client/async/ were preventing these
from being sent except before completion, even if the blocks *were* encoded.
Fix background block encoder.
Logging.
Modified: trunk/freenet/src/freenet/client/async/BackgroundBlockEncoder.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BackgroundBlockEncoder.java
2006-09-29 19:17:02 UTC (rev 10576)
+++ trunk/freenet/src/freenet/client/async/BackgroundBlockEncoder.java
2006-09-29 20:35:03 UTC (rev 10577)
@@ -39,16 +39,17 @@
}
public void run() {
-outer: while(true) {
+ while(true) {
SingleBlockInserter sbi = null;
synchronized(this) {
- try {
- wait(100*1000);
- } catch (InterruptedException e) {
- // Ignore
+ while(queue.isEmpty()) {
+ try {
+ wait(100*1000);
+ } catch (InterruptedException e) {
+ // Ignore
+ }
}
- while(true) {
- if(queue.isEmpty()) continue outer;
+ while(!queue.isEmpty()) {
WeakReference ref = (WeakReference)
queue.remove(queue.size()-1);
sbi = (SingleBlockInserter) ref.get();
if(sbi != null) break;
Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileInserter.java
2006-09-29 19:17:02 UTC (rev 10576)
+++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java
2006-09-29 20:35:03 UTC (rev 10577)
@@ -554,6 +554,8 @@
logMINOR = Logger.shouldLog(Logger.MINOR, this);
+ if(logMINOR) Logger.minor(this,
"onFetchable("+state+")");
+
boolean meta;
synchronized(this) {
@@ -562,6 +564,7 @@
if(!metaInsertStarted) {
Logger.error(this, "Metadata
insert not started yet got onFetchable for it: "+state+" on "+this);
}
+ if(logMINOR) Logger.minor(this,
"Metadata fetchable"+(metaFetchable?"":" already"));
if(metaFetchable) return;
metaFetchable = true;
} else {
@@ -570,8 +573,8 @@
return;
}
dataFetchable = true;
+ if(logMINOR) Logger.minor(this, "Data
fetchable");
if(metaInsertStarted) return;
- metaInsertStarted = true;
}
}
@@ -586,9 +589,11 @@
ClientPutState putter;
ClientPutState splitInserter;
synchronized(this) {
+ if(metaInsertStarted) return;
if(metadataPutter == null) {
if(logMINOR) Logger.minor(this,
"Cannot start metadata yet: no metadataPutter");
- }
+ } else
+ metaInsertStarted = true;
putter = metadataPutter;
splitInserter = sfi;
}
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-09-29 19:17:02 UTC (rev 10576)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-09-29 20:35:03 UTC (rev 10577)
@@ -438,6 +438,7 @@
/** Force the remaining blocks which haven't been encoded so far to be
encoded ASAP. */
public void forceEncode() {
+ Logger.minor(this, "Forcing encode on "+this);
for(int i=0;i<segments.length;i++) {
segments[i].forceEncode();
}
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2006-09-29 19:17:02 UTC (rev 10576)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
2006-09-29 20:35:03 UTC (rev 10577)
@@ -610,7 +610,7 @@
}
public synchronized boolean isFetchable() {
- return blocksCompleted > dataBlocks.length;
+ return blocksCompleted >= dataBlocks.length;
}
public void onFetchable(ClientPutState state) {
@@ -619,7 +619,7 @@
/** Force the remaining blocks which haven't been encoded so far to be
encoded ASAP. */
public void forceEncode() {
- // TODO Auto-generated method stub
-
+
blockInsertContext.backgroundBlockEncoder.queue(dataBlockInserters);
+
blockInsertContext.backgroundBlockEncoder.queue(checkBlockInserters);
}
}
Modified: trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java
2006-09-29 19:17:02 UTC (rev 10576)
+++ trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java
2006-09-29 20:35:03 UTC (rev 10577)
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.1 on 29/09/06 14:46 */
+/* The following code was generated by JFlex 1.4.1 on 29/09/06 20:17 */
/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
@@ -14,7 +14,7 @@
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.1
- * on 29/09/06 14:46 from the specification file
+ * on 29/09/06 20:17 from the specification file
* <tt>freenet/clients/http/filter/CSSTokenizerFilter.jflex</tt>
*/
class CSSTokenizerFilter {