Is it necessary to take the lock while calling onFailure in the first
instance? And while calling start() in the second?
On Sun, Jul 09, 2006 at 09:32:26PM +0000, nextgens at freenetproject.org wrote:
> Author: nextgens
> Date: 2006-07-09 21:32:21 +0000 (Sun, 09 Jul 2006)
> New Revision: 9527
>
> Modified:
> trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
> trunk/freenet/src/freenet/node/Node.java
> Log:
> Consistent locking in MyARKInserter and BaseSingleFileFetcher
>
> Modified: trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
> ===================================================================
> --- trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
> 2006-07-09 21:21:37 UTC (rev 9526)
> +++ trunk/freenet/src/freenet/client/async/BaseSingleFileFetcher.java
> 2006-07-09 21:32:21 UTC (rev 9527)
> @@ -12,7 +12,7 @@
> public abstract class BaseSingleFileFetcher implements SendableGet {
>
> final ClientKey key;
> - protected boolean cancelled;
> + private boolean cancelled;
> final int maxRetries;
> private int retryCount;
> final FetcherContext ctx;
> @@ -32,9 +32,11 @@
>
> /** Do the request, blocking. Called by RequestStarter. */
> public void send(Node node) {
> - if(cancelled) {
> - onFailure(new
> LowLevelGetException(LowLevelGetException.CANCELLED));
> - return;
> + synchronized (this) {
> + if(cancelled) {
> + onFailure(new
> LowLevelGetException(LowLevelGetException.CANCELLED));
> + return;
> + }
> }
> // Do we need to support the last 3?
> ClientKeyBlock block;
>
> Modified: trunk/freenet/src/freenet/node/Node.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/Node.java 2006-07-09 21:21:37 UTC (rev
> 9526)
> +++ trunk/freenet/src/freenet/node/Node.java 2006-07-09 21:32:21 UTC (rev
> 9527)
> @@ -189,11 +189,13 @@
> return true; // no point inserting
> }
> Peer[] p = getPrimaryIPAddress();
> - if(lastInsertedPeers != null) {
> - if(p.length != lastInsertedPeers.length) return
> true;
> - for(int i=0;i<p.length;i++)
> -
> if(!p[i].strictEquals(lastInsertedPeers[i]))
> - return true;
> + synchronized (this) {
> + if(lastInsertedPeers != null) {
> + if(p.length !=
> lastInsertedPeers.length) return true;
> + for(int i=0;i<p.length;i++)
> +
> if(!p[i].strictEquals(lastInsertedPeers[i]))
> + return true;
> + }
> }
> return false;
> }
> @@ -226,30 +228,32 @@
>
> Logger.minor(this, "Inserting ARK: "+uri);
>
> - inserter = new ClientPutter(this, b, uri,
> - new ClientMetadata("text/plain") /* it
> won't quite fit in an SSK anyway */,
> -
> Node.this.makeClient((short)0).getInserterContext(),
> - chkPutScheduler, sskPutScheduler,
> RequestStarter.INTERACTIVE_PRIORITY_CLASS, false, false, this);
> -
> - try {
> - inserter.start();
> - if(fs.get("physical.udp") == null)
> - lastInsertedPeers = null;
> - else {
> - try {
> - String[] all =
> fs.getAll("physical.udp");
> - Peer[] peers = new
> Peer[all.length];
> - for(int i=0;i<all.length;i++)
> - peers[i] = new
> Peer(all[i], false);
> - lastInsertedPeers = peers;
> - } catch (PeerParseException e1) {
> - Logger.error(this, "Error
> parsing own ref: "+e1+" : "+fs.get("physical.udp"), e1);
> - } catch (UnknownHostException e1) {
> - Logger.error(this, "Error
> parsing own ref: "+e1+" : "+fs.get("physical.udp"), e1);
> + synchronized (this) {
> + inserter = new ClientPutter(this, b, uri,
> + new
> ClientMetadata("text/plain") /* it won't quite fit in an SSK anyway */,
> +
> Node.this.makeClient((short)0).getInserterContext(),
> + chkPutScheduler,
> sskPutScheduler, RequestStarter.INTERACTIVE_PRIORITY_CLASS, false, false,
> this);
> +
> + try {
> + inserter.start();
> + if(fs.get("physical.udp") == null)
> + lastInsertedPeers = null;
> + else {
> + try {
> + String[] all =
> fs.getAll("physical.udp");
> + Peer[] peers = new
> Peer[all.length];
> + for(int
> i=0;i<all.length;i++)
> + peers[i] = new
> Peer(all[i], false);
> + lastInsertedPeers =
> peers;
> + } catch (PeerParseException e1)
> {
> + Logger.error(this,
> "Error parsing own ref: "+e1+" : "+fs.get("physical.udp"), e1);
> + } catch (UnknownHostException
> e1) {
> + Logger.error(this,
> "Error parsing own ref: "+e1+" : "+fs.get("physical.udp"), e1);
> + }
> }
> + } catch (InserterException e) {
> + onFailure(e, inserter);
> }
> - } catch (InserterException e) {
> - onFailure(e, inserter);
> }
> }
>
>
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
>
--
Matthew J Toseland - toad at amphibian.dyndns.org
Freenet Project Official Codemonkey - http://freenetproject.org/
ICTHUS - Nothing is impossible. Our Boss says so.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL:
<https://emu.freenetproject.org/pipermail/cvs/attachments/20060711/55af3b74/attachment.pgp>