On 22 November 2010 23:23, <[email protected]> wrote:
> Author: rgoers
> Date: Mon Nov 22 23:23:59 2010
> New Revision: 1037935
>
> URL: http://svn.apache.org/viewvc?rev=1037935&view=rev
> Log:
> Fox for VFS-343. Use AtomicInteger instead of synchronizing on FileSystem
>
> Modified:
>
> commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
>
> Modified:
> commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java?rev=1037935&r1=1037934&r2=1037935&view=diff
> ==============================================================================
> ---
> commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
> (original)
> +++
> commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
> Mon Nov 22 23:23:59 2010
> @@ -46,6 +46,7 @@ import java.util.HashMap;
> import java.util.HashSet;
> import java.util.Map;
> import java.lang.reflect.InvocationTargetException;
> +import java.util.concurrent.atomic.AtomicInteger;
>
> /**
> * A partial {...@link org.apache.commons.vfs2.FileSystem} implementation.
> @@ -101,7 +102,7 @@ public abstract class AbstractFileSystem
> /**
> * open streams counter for this filesystem
> */
> - private int openStreams;
> + private AtomicInteger openStreams = new AtomicInteger(0);
Could be made final.
>
> protected AbstractFileSystem(final FileName rootName,
> final FileObject parentLayer,
> @@ -647,24 +648,25 @@ public abstract class AbstractFileSystem
>
> void streamOpened()
> {
> - synchronized (this)
> - {
> - openStreams++;
> - }
> + openStreams.incrementAndGet();
> }
>
> void streamClosed()
> {
> - synchronized (this)
> + int count;
> +
> + do
> {
> - if (openStreams > 0)
> + count = openStreams.get();
> + if (count < 1)
> {
> - openStreams--;
> - if (openStreams < 1)
> - {
> - notifyAllStreamsClosed();
> - }
> + return;
> }
> + } while(openStreams.compareAndSet(count, count - 1));
> +
> + if (count == 1)
> + {
> + notifyAllStreamsClosed();
> }
> }
>
> @@ -681,9 +683,6 @@ public abstract class AbstractFileSystem
> */
> public boolean isOpen()
> {
> - synchronized (this)
> - {
> - return openStreams > 0;
> - }
> + return openStreams.get() > 0;
> }
> }
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]