Expand the synchronization on the if(cw == null) { set cw }; if you
check a variable and then set it, the check and the set should be
synchronized (so it is atomic).

On Tue, Jul 11, 2006 at 10:58:27PM +0000, nextgens at freenetproject.org wrote:
> Author: nextgens
> Date: 2006-07-11 22:58:25 +0000 (Tue, 11 Jul 2006)
> New Revision: 9569
> 
> Modified:
>    trunk/freenet/src/freenet/node/CHKInsertSender.java
> Log:
> maybe fix some locking issues ... it needs to be reviewed
> 
> Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/CHKInsertSender.java       2006-07-11 
> 22:35:55 UTC (rev 9568)
> +++ trunk/freenet/src/freenet/node/CHKInsertSender.java       2006-07-11 
> 22:58:25 UTC (rev 9569)
> @@ -531,17 +531,16 @@
>      private void finish(int code, PeerNode next) {
>          Logger.minor(this, "Finished: "+code+" on "+this, new 
> Exception("debug"));
>          setStatusTime = System.currentTimeMillis();
> -        synchronized(this) {
> +     
> +        synchronized(this) {   
>               if(status != NOT_FINISHED)
> -                     throw new IllegalStateException("finish() called with 
> "+code+" when was already "+status);
> +                     throw new IllegalStateException("finish() called with 
> "+code+" when was already "+status);
>  
>               if((code == ROUTE_NOT_FOUND) && !sentRequest)
>                       code = ROUTE_REALLY_NOT_FOUND;
> -             
> -             status = code;
> -        
> +
> +            status = code;
>               notifyAll();
> -
>               Logger.minor(this, "Set status code: "+getStatusString()+" on 
> "+uid);
>          }
>          // Now wait for transfers, or for downstream transfer notifications.
> @@ -611,7 +610,9 @@
>               Thread t;
>  
>               if(cw == null)
> -                     cw = new CompletionWaiter();
> +                     synchronized (this) {
> +                             cw = new CompletionWaiter();
> +                     }
>               else
>                       return;
>               t = new Thread(cw, "Completion waiter for "+uid);
> @@ -636,20 +637,19 @@
>                       int timeout;
>                       boolean noTimeLeft = false;
>  
> -                     synchronized(this) {
> -                             long now = System.currentTimeMillis();
> -                             if((status == NOT_FINISHED) || (setStatusTime 
> == -1)) {
> -                                     // Wait 5 seconds, then try again
> -                                     timeout = 5000;
> -                             } else {
> -                                     // Completed, wait for everything
> -                                     timeout = 
> (int)Math.min(Integer.MAX_VALUE, (setStatusTime + 
> TRANSFER_COMPLETION_TIMEOUT) - now);
> -                             }
> -                             if(timeout <= 0) {
> -                                     noTimeLeft = true;
> -                                     timeout = 1;
> -                             }
> +                     long now = System.currentTimeMillis();
> +                     if((status == NOT_FINISHED) || (setStatusTime == -1)) {
> +                             // Wait 5 seconds, then try again
> +                             timeout = 5000;
> +                     } else {
> +                             // Completed, wait for everything
> +                             timeout = (int)Math.min(Integer.MAX_VALUE, 
> (setStatusTime + TRANSFER_COMPLETION_TIMEOUT) - now);
>                       }
> +                     if(timeout <= 0) {
> +                             noTimeLeft = true;
> +                             timeout = 1;
> +                     }
> +
>                       
>                       MessageFilter mf = null;
>                       for(int i=0;i<waiters.length;i++) {
> 
> _______________________________________________
> 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/devl/attachments/20060712/3cba07d7/attachment.pgp>

Reply via email to