synchronized InputStream getInputStream() throws IOException { try { lock(); } catch (IOException e) {  release();
protected InputStream getInputStream(int generation, int openMask) throws IOException { if (inputFile != null) { throw new IOException("Input stream already open"); } int[] generations = getFileGenerations(referenceFile); if (generations == null) { throw new FileNotFoundException("File not found"); } String name = referenceFile.getName(); File parent = new File(referenceFile.getParent());
	synchronized InputStream getInputStream() throws IOException {		try {			lock();		} catch (IOException e) {			/* the lock request failed; decrement the use count */			release();			throw e;		}		try {			BufferedInputStream bis = recoverFile();			if (bis == null)				return new FileInputStream(orgFile.getPath());			else				return bis; // don't double read file from storage		} catch (IOException e) {			unlock();			release();			throw e;		}	}