* Matthew Toseland <toad at amphibian.dyndns.org> [2008-08-25 23:27:59]:

> On Monday 25 August 2008 22:45, Florent Daigni?re wrote:
> > * Matthew Toseland <toad at amphibian.dyndns.org> [2008-08-25 22:15:24]:
> > 
> > > On Monday 25 August 2008 14:46, nextgens at freenetproject.org wrote:
> > > > Author: nextgens
> > > > Date: 2008-08-25 13:46:46 +0000 (Mon, 25 Aug 2008)
> > > > New Revision: 22133
> > > > 
> > > > Modified:
> > > >    trunk/freenet/src/freenet/node/NodeClientCore.java
> > > >    trunk/freenet/src/freenet/support/io/ArrayBucket.java
> > > >    trunk/freenet/src/freenet/support/io/ArrayBucketFactory.java
> > > >    
> > > trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
> > > >    trunk/freenet/src/freenet/support/io/TempBucketFactory.java
> > > >    trunk/freenet/test/freenet/clients/http/filter/ContentFilterTest.java
> > > >    trunk/freenet/test/freenet/support/compress/GzipCompressorTest.java
> > > > Log:
> > > > TempBucketFactory: it is *very* unlikely that it won't break things! If 
> it 
> > > doesn't it should speed things up significantly and solve the OOM 
> > > problems 
> a 
> > > few users have been reporting.
> > > > 

[...]

> > > > +               private final void migrateToFileBucket() throws 
> > > > IOException {
> > > > +                       Bucket toMigrate = null;
> > > > +                       synchronized(currentBucket) {
> > > 
> > > You shouldn't synchronize on it if it is going to change. Can't you use 
> > > synchronized(this)?
> > 
> > We need a shared lock on the Streams too... but yes I could do it
> 
> Sure, they'd be synchronized(TempBucket.this).

I've created a dedicated sync. object

> > > > +                       @Override
> > > > +                       public void flush() throws IOException {
> > > > +                               synchronized(currentBucket) {
> > > > +                                       
> > > > _maybeMigrateRamBucket(currentSize);
> > > > +                                       _maybeResetOutputStream();
> > > > +                                       os.flush();
> > > > +                               }
> > > > +                       }
> > > 
> > > No point flushing *after* you've reset the OS, is there? Migrating will 
> > > close() and therefore flush. Of course if you don't, you do want to call 
> > > flush() here.
> > 
> > If there is a BufferedOuputStream involved on the underlying buckets it
> > will clobber any IOException thrown on close() hence flushing is a good
> > idea.
> 
> I don't understand...

BufferedOutputStream extends FilteredOutputStream... The former inherits
the close() method of the latter which clobbers IOExceptions silently.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20080826/7e4cb8e4/attachment.pgp>

Reply via email to