Index: FileDataBlock.java =================================================================== RCS file: /var/opt/gerd_repository/DCJMS/src/org/activemq/io/util/FileDataBlock.java,v retrieving revision 1.2 diff -u -r1.2 FileDataBlock.java --- FileDataBlock.java 3 Nov 2005 09:57:49 -0000 1.2 +++ FileDataBlock.java 4 Nov 2005 05:20:22 -0000 @@ -52,14 +52,14 @@ } } - public void deactivate() throws IOException { + private void deactivate() throws IOException { if( dataBlock!=null ) { dataBlock.close(); dataBlock=null; } } - public void activate() throws IOException { + private void activate() throws IOException { if( dataBlock==null ) { dataBlock = new RandomAccessFile(file, "rw"); } @@ -71,7 +71,7 @@ * @throws IOException */ synchronized void close() throws IOException { - dataBlock.close(); + if( dataBlock!=null ) dataBlock.close(); file.delete(); } @@ -83,7 +83,15 @@ * @throws IOException */ synchronized boolean isEnoughSpace(byte[] data) throws IOException { - return ((dataBlock.length() + data.length) < maxSize); + try + { + activate(); + return ((dataBlock.length() + data.length) < maxSize); + } + finally + { + deactivate(); + } } /** @@ -93,10 +101,17 @@ * @throws IOException */ synchronized void write(byte[] data) throws IOException { - activate(); - dataBlock.seek(dataBlock.length()); - dataBlock.writeInt(data.length); - dataBlock.write(data); + try + { + activate(); + dataBlock.seek(dataBlock.length()); + dataBlock.writeInt(data.length); + dataBlock.write(data); + } + finally + { + deactivate(); + } } /** @@ -106,22 +121,28 @@ * @throws IOException */ synchronized byte[] read() throws IOException { - activate(); - byte[] result = null; - if (currentOffset > 0 && currentOffset < dataBlock.length()) { - dataBlock.seek(currentOffset); - int length = dataBlock.readInt(); - result = new byte[length]; - dataBlock.readFully(result); - currentOffset = dataBlock.getFilePointer(); - updateHeader(currentOffset); + try + { + activate(); + byte[] result = null; + if (currentOffset > 0 && currentOffset < dataBlock.length()) { + dataBlock.seek(currentOffset); + int length = dataBlock.readInt(); + result = new byte[length]; + dataBlock.readFully(result); + currentOffset = dataBlock.getFilePointer(); + updateHeader(currentOffset); + } + return result; + } + finally + { + deactivate(); } - return result; } private void updateHeader(long pos) throws IOException { dataBlock.seek(0); dataBlock.writeLong(pos); } - }