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>

Reply via email to