Author: rgoers
Date: Sat Sep 24 07:42:23 2011
New Revision: 1175121

URL: http://svn.apache.org/viewvc?rev=1175121&view=rev
Log:
Use atomic variables in MonitorInputStream.

Modified:
    
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.java
    commons/proper/vfs/trunk/src/changes/changes.xml

Modified: 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.java
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.java?rev=1175121&r1=1175120&r2=1175121&view=diff
==============================================================================
--- 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.java
 (original)
+++ 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.java
 Sat Sep 24 07:42:23 2011
@@ -19,6 +19,8 @@ package org.apache.commons.vfs2.util;
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * An InputStream that provides buffering and end-of-stream monitoring.
@@ -28,13 +30,12 @@ import java.io.InputStream;
 public class MonitorInputStream
     extends BufferedInputStream
 {
-    private boolean finished;
-    private long count;
+    private AtomicBoolean finished = new AtomicBoolean(false);
+    private AtomicLong count = new AtomicLong(0);
 
     public MonitorInputStream(final InputStream in)
     {
         super(in);
-        count = 0;
     }
 
 
@@ -47,7 +48,7 @@ public class MonitorInputStream
     @Override
     public synchronized int available() throws IOException
     {
-        if (finished)
+        if (finished.get())
         {
             return 0;
         }
@@ -63,7 +64,7 @@ public class MonitorInputStream
     @Override
     public int read() throws IOException
     {
-        if (finished)
+        if (finished.get())
         {
             return -1;
         }
@@ -71,7 +72,7 @@ public class MonitorInputStream
         final int ch = super.read();
         if (ch != -1)
         {
-            count++;
+            count.incrementAndGet();
             return ch;
         }
 
@@ -92,7 +93,7 @@ public class MonitorInputStream
     public int read(final byte[] buffer, final int offset, final int length)
         throws IOException
     {
-        if (finished)
+        if (finished.get())
         {
             return -1;
         }
@@ -100,7 +101,7 @@ public class MonitorInputStream
         final int nread = super.read(buffer, offset, length);
         if (nread != -1)
         {
-            count += nread;
+            count.addAndGet(nread);
             return nread;
         }
 
@@ -117,7 +118,8 @@ public class MonitorInputStream
     @Override
     public void close() throws IOException
     {
-        if (finished)
+        boolean closed = finished.getAndSet(true);
+        if (closed)
         {
             return;
         }
@@ -143,7 +145,6 @@ public class MonitorInputStream
             exc = ioe;
         }
 
-        finished = true;
         if (exc != null)
         {
             throw exc;
@@ -165,6 +166,6 @@ public class MonitorInputStream
      */
     public long getCount()
     {
-        return count;
+        return count.get();
     }
 }

Modified: commons/proper/vfs/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/src/changes/changes.xml?rev=1175121&r1=1175120&r2=1175121&view=diff
==============================================================================
--- commons/proper/vfs/trunk/src/changes/changes.xml (original)
+++ commons/proper/vfs/trunk/src/changes/changes.xml Sat Sep 24 07:42:23 2011
@@ -23,6 +23,9 @@
 
   <body>
     <release version="2.1" date="TBD" description="">
+      <action issue="VFS-335" dev="rgoers" type="fix">
+        Use atomic variables in MonitorInputStream.
+      </action>
       <action issue="VFS-364" dev="rgoers" type="fix">
         Check the href in the response for just a path in addition to a full 
uri.
       </action>


Reply via email to