You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Michael McCandless (JIRA)" <ji...@apache.org> on 2016/12/09 22:50:58 UTC
[jira] [Updated] (LUCENE-7584) Potential leak issue
[ https://issues.apache.org/jira/browse/LUCENE-7584?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael McCandless updated LUCENE-7584:
---------------------------------------
Description:
May the following method have a potential leak like LUCENE-3251 when directory.createOutput(fileName) throws IOException?
(Found the code from the recent code snapshot)
lucene/src/java/org/apache/lucene/index/CompoundFileWriter.java
{noformat}
public void close() throws IOException {
if (merged)
throw new IllegalStateException("Merge already performed");
if (entries.isEmpty())
throw new IllegalStateException("No entries to merge have been defined");
merged = true;
// open the compound stream
IndexOutput os = directory.createOutput(fileName);
IOException priorException = null;
try {
// Write the Version info - must be a VInt because CFR reads a VInt
// in older versions!
os.writeVInt(FORMAT_CURRENT);
// Write the number of entries
os.writeVInt(entries.size());
// Write the directory with all offsets at 0.
// Remember the positions of directory entries so that we can
// adjust the offsets later
long totalSize = 0;
for (FileEntry fe : entries) {
fe.directoryOffset = os.getFilePointer();
os.writeLong(0); // for now
os.writeString(IndexFileNames.stripSegmentName(fe.file));
totalSize += directory.fileLength(fe.file);
}
// Pre-allocate size of file as optimization --
...
} catch (IOException e) {
priorException = e;
} finally {
IOUtils.closeSafely(priorException, os);
}
}
{noformat}
was:
May the following method have a potential leak like LUCENE-3251 when directory.createOutput(fileName) throws IOException?
(Found the code from the recent code snapshot)
lucene/src/java/org/apache/lucene/index/CompoundFileWriter.java
public void close() throws IOException {
if (merged)
throw new IllegalStateException("Merge already performed");
if (entries.isEmpty())
throw new IllegalStateException("No entries to merge have been defined");
merged = true;
// open the compound stream
IndexOutput os = directory.createOutput(fileName);
IOException priorException = null;
try {
// Write the Version info - must be a VInt because CFR reads a VInt
// in older versions!
os.writeVInt(FORMAT_CURRENT);
// Write the number of entries
os.writeVInt(entries.size());
// Write the directory with all offsets at 0.
// Remember the positions of directory entries so that we can
// adjust the offsets later
long totalSize = 0;
for (FileEntry fe : entries) {
fe.directoryOffset = os.getFilePointer();
os.writeLong(0); // for now
os.writeString(IndexFileNames.stripSegmentName(fe.file));
totalSize += directory.fileLength(fe.file);
}
// Pre-allocate size of file as optimization --
...
} catch (IOException e) {
priorException = e;
} finally {
IOUtils.closeSafely(priorException, os);
}
}
> Potential leak issue
> --------------------
>
> Key: LUCENE-7584
> URL: https://issues.apache.org/jira/browse/LUCENE-7584
> Project: Lucene - Core
> Issue Type: Bug
> Reporter: Jaechang Nam
> Priority: Trivial
>
> May the following method have a potential leak like LUCENE-3251 when directory.createOutput(fileName) throws IOException?
> (Found the code from the recent code snapshot)
> lucene/src/java/org/apache/lucene/index/CompoundFileWriter.java
> {noformat}
> public void close() throws IOException {
> if (merged)
> throw new IllegalStateException("Merge already performed");
> if (entries.isEmpty())
> throw new IllegalStateException("No entries to merge have been defined");
> merged = true;
> // open the compound stream
> IndexOutput os = directory.createOutput(fileName);
> IOException priorException = null;
> try {
> // Write the Version info - must be a VInt because CFR reads a VInt
> // in older versions!
> os.writeVInt(FORMAT_CURRENT);
> // Write the number of entries
> os.writeVInt(entries.size());
> // Write the directory with all offsets at 0.
> // Remember the positions of directory entries so that we can
> // adjust the offsets later
> long totalSize = 0;
> for (FileEntry fe : entries) {
> fe.directoryOffset = os.getFilePointer();
> os.writeLong(0); // for now
> os.writeString(IndexFileNames.stripSegmentName(fe.file));
> totalSize += directory.fileLength(fe.file);
> }
> // Pre-allocate size of file as optimization --
> ...
> } catch (IOException e) {
> priorException = e;
> } finally {
> IOUtils.closeSafely(priorException, os);
> }
> }
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org