Author: zothar
Date: 2006-05-21 20:20:18 +0000 (Sun, 21 May 2006)
New Revision: 8822
Modified:
trunk/freenet/src/freenet/node/ARKFetcher.java
trunk/freenet/src/freenet/node/Node.java
Log:
Be more careful about changes to the arkFetchers HashMap supporting the ARK
fetch requests count.
Modified: trunk/freenet/src/freenet/node/ARKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetcher.java 2006-05-21 15:30:05 UTC
(rev 8821)
+++ trunk/freenet/src/freenet/node/ARKFetcher.java 2006-05-21 20:20:18 UTC
(rev 8822)
@@ -83,9 +83,11 @@
backoff = MIN_BACKOFF;
Logger.minor(this, "Cancelling ARK fetch for "+peer);
shouldRun = false;
- if(isFetching) {
- node.removeARKFetcher(identity,this);
- isFetching = false;
+ synchronized(this){
+ if(isFetching) {
+ node.removeARKFetcher(identity,this);
+ isFetching = false;
+ }
}
if(getter != null)
getter.cancel();
@@ -95,8 +97,8 @@
Logger.minor(this, "Fetched ARK for "+peer, new
Exception("debug"));
// Fetcher context specifies an upper bound on size.
backoff = MIN_BACKOFF;
- if(isFetching) {
- synchronized(this){
+ synchronized(this){
+ if(isFetching) {
node.removeARKFetcher(identity,this);
isFetching = false;
}
@@ -122,8 +124,8 @@
public void onFailure(FetchException e, ClientGetter state) {
Logger.minor(this, "Failed to fetch ARK for "+peer+" : "+e, e);
- if(isFetching) {
- synchronized(this){
+ synchronized(this){
+ if(isFetching) {
node.removeARKFetcher(identity,this);
isFetching = false;
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2006-05-21 15:30:05 UTC (rev
8821)
+++ trunk/freenet/src/freenet/node/Node.java 2006-05-21 20:20:18 UTC (rev
8822)
@@ -2658,7 +2658,12 @@
* Add a ARKFetcher to the map
*/
public synchronized void addARKFetcher(String identity, ARKFetcher
fetcher) {
- Logger.minor(this, "addARKFetcher(): adding ARK Fetcher for "+identity);
+ if(arkFetchers.containsKey(identity)) {
+ ARKFetcher af = (ARKFetcher) arkFetchers.get(identity);
+ Logger.error(this, "addARKFetcher(): identity '"+identity+"'
already in arkFetcher as "+af+" and you want to add"+fetcher);
+ return;
+ }
+ Logger.normal(this, "addARKFetcher(): adding ARK Fetcher for
"+identity);
arkFetchers.put(identity, fetcher);
}
@@ -2673,7 +2678,11 @@
* Remove a ARKFetcher from the map
*/
public synchronized void removeARKFetcher(String identity, ARKFetcher
fetcher) {
- Logger.minor(this, "removeARKFetcher(): removing ARK Fetcher for
"+identity);
+ if(!arkFetchers.containsKey(identity)) {
+ Logger.error(this, "removeARKFetcher(): identity '"+identity+"'
not in arkFetcher to remove");
+ return;
+ }
+ Logger.normal(this, "removeARKFetcher(): removing ARK Fetcher for
"+identity);
ARKFetcher af = (ARKFetcher) arkFetchers.remove(identity);
if(af != fetcher) {
Logger.error(this, "Removed "+af+" should be "+fetcher+" for
"+identity+" in removeARKFetcher");