private void lock() throws IOException, BlockStoreException { if (!semaphores.tryAcquire(fileName)) { throw new BlockStoreException("File in use"); } try { lock = channel.tryLock(); } catch (OverlappingFileLockException e) { semaphores.release(fileName); lock = null; } if (lock == null) { try { this.file.close(); } finally { this.file = null; } throw new BlockStoreException("Could not lock file"); } }
public void close() throws BlockStoreException { ensureOpen(); try { file.close(); } catch (IOException e) { throw new BlockStoreException(e); } finally { semaphores.release(this.fileName); file = null; } }