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>