[ http://issues.apache.org/jira/browse/LUCENE-669?page=comments#action_12454488 ] Michael McCandless commented on LUCENE-669: -------------------------------------------
Ugh! This bug is clearly a heisenbug. OK, I can also reproduce this on Windows when I use the IBM 1.5.0 JRE. I can't repro with the Sun 1.5.0_07 JRE. When I apply your patch, the IOException goes away. Furthermore, my best efforts to get a standalone test to show the error have failed. I don't understand what precise tickling is required to get the IOException to happen. Finally, I found this spooky very recent thread on java-user that looks very much like this error (and was never resolved): http://www.gossamer-threads.com/lists/lucene/java-user/40357 I think in this case it was on Sun's JRE. So I tried the test using "java -server" but it didn't fail. Sigh. My conclusion is: double-closing a RandomAccessFile is dangerous! And quite possibly can cause problems for "real" use cases (ie, not just when testing under Eclipse). I will commit this patch. I made a couple of tiny changes: changed the name to "isOpen" and moved up the "isOpen = true" to be right after the file is actually opened. I also like the change to flush the buffer on finalize (if the file is still open). Thanks Michael! > finalize()-methods of FSDirectory.FSIndexInput and FSDirectory.FSIndexOutput > try to close already closed file > ------------------------------------------------------------------------------------------------------------- > > Key: LUCENE-669 > URL: http://issues.apache.org/jira/browse/LUCENE-669 > Project: Lucene - Java > Issue Type: Bug > Components: Store > Reporter: Michael Busch > Assigned To: Michael Busch > Priority: Trivial > Attachments: FSDirectory_close_file2.patch > > > Hi all, > I found a small problem in FSDirectory: The finalize()-methods of > FSDirectory.FSIndexInput and FSDirectory.FSIndexOutput try to close the > underlying file. This is not a problem unless the file has been closed before > by calling the close() method. If it has been closed before, the finalize > method throws an IOException saying that the file is already closed. Usually > this IOException would go unnoticed, because the GarbageCollector, which > calls finalize(), just eats it. However, if I use the Eclipse debugger the > execution of my code will always be suspended when this exception is thrown. > Even though this exception probably won't cause problems during normal > execution of Lucene, the code becomes cleaner if we apply this small patch. > Might this IOException also have a performance impact, if it is thrown very > frequently? > I attached the patch which applies cleanly on the current svn HEAD. All > testcases pass and I verfied with the Eclipse debugger that the IOException > is not longer thrown. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]