On Fri, Nov 7, 2008 at 8:43 AM, Florent Daigni?re
<nextgens at freenetproject.org> wrote:
> * Daniel Cheng <j16sdiz+freenet at gmail.com> [2008-11-07 08:24:06]:
>
>> On Wed, Oct 29, 2008 at 2:09 AM,  <nextgens at freenetproject.org> wrote:
>> > Author: nextgens
>> > Date: 2008-10-28 18:09:53 +0000 (Tue, 28 Oct 2008)
>> > New Revision: 23155
>> >
>> > Modified:
>> >   trunk/freenet/src/freenet/client/async/SingleFileInserter.java
>> >   trunk/freenet/src/freenet/support/compress/Compressor.java
>> > Log:
>> > Use java.utils.concurrent.Semaphore to serialize compression-related 
>> > operations (not tested)
>> >
>> > Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
>> > ===================================================================
>> > --- trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
>> > 2008-10-28 18:09:24 UTC (rev 23154)
>> > +++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java      
>> > 2008-10-28 18:09:53 UTC (rev 23155)
>> > @@ -26,6 +26,7 @@
>> >  import freenet.support.io.BucketChainBucketFactory;
>> >  import freenet.support.io.BucketTools;
>> >  import freenet.support.io.NativeThread;
>> > +import java.util.concurrent.Semaphore;
>> >
>> >  /**
>> >  * Attempt to insert a file. May include metadata.
>> > @@ -108,10 +109,6 @@
>> >                OffThreadCompressor otc = new OffThreadCompressor();
>> >                ctx.executor.execute(otc, "Compressor for " + this);
>> >        }
>> > -
>> > -       // Use a mutex to serialize compression (limit memory usage/IO)
>> > -       // Of course it doesn't make any sense on multi-core systems.
>> > -       private static final Object compressorSync = new Object();
>> >
>> >        private  class OffThreadCompressor implements PrioRunnable {
>> >                public void run() {
>> > @@ -140,7 +137,14 @@
>> >        }
>> >
>> >        private void tryCompress() throws InsertException {
>> > -               synchronized(compressorSync) {
>> > +               try {
>> > +                       try {
>> > +                               
>> > COMPRESSOR_TYPE.compressorSemaphore.acquire();
>> > +                       } catch (InterruptedException e) {
>> > +                               // should not happen
>> > +                               Logger.error(this, "Caught an 
>> > InterruptedException:"+e.getMessage(), e);
>> > +                               throw new 
>> > InsertException(InsertException.INTERNAL_ERROR, e, null);
>> > +                       }
>> >                // First, determine how small it needs to be
>> >                Bucket origData = block.getData();
>> >                Bucket data = origData;
>> > @@ -302,6 +306,8 @@
>> >                        sfi.start();
>> >                        if(earlyEncode) sfi.forceEncode();
>> >                }
>> > +               } finally {
>> > +               COMPRESSOR_TYPE.compressorSemaphore.release();
>>
>> the semaphore should go into Compressor, not Compressor.COMPRESSOR_TYPE
>>
>
> Change it then
>

oops.
Compressor is an interface.

Reply via email to