* Matthew Toseland <toad at amphibian.dyndns.org> [2006-07-11 00:45:30]:
> Is it necessary to take the lock while calling onFailure in the first
> instance? And while calling start() in the second?
>
We are writting lastInsertedPeers; we need the lock
we don't need on start() indeed ... as we are properly synchronizing
from inside : r9557 should fix it
> 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/2690a4c5/attachment.pgp>