Maximilian Haru Raditya created LUCENENET-511:
-------------------------------------------------
Summary: ObjectDisposedException thrown when IndexWriter disposed
by finalizer
Key: LUCENENET-511
URL: https://issues.apache.org/jira/browse/LUCENENET-511
Project: Lucene.Net
Issue Type: Bug
Components: Lucene.Net Core
Affects Versions: Lucene.Net 3.0.3
Environment: Windows 7 x64, .NET Framework 4.5
Reporter: Maximilian Haru Raditya
I'm having an issue of ObjectDisposedException with an error message "Cannot
access a closed file." when working IndexWriter.
I manage to reproduce it when I create a new WPF (4.5) app and install
3.0.3-RC2 from NuGet. I then create a LuceneManager which implements
IDisposable, and I create a finalizer for it. I wrap IndexWriter inside it, and
dispose it inside Dispose(bool). The implementation code looks like this:
namespace WpfApplication
{
using System;
using System.Collections.Generic;
using System.IO;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Index;
using Lucene.Net.Store;
using Version = Lucene.Net.Util.Version;
public class LuceneManager : IDisposable
{
public static readonly string IndexPath =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Index");
private IndexWriter _indexWriter;
private bool _isDisposed;
public LuceneManager()
{
var directory = FSDirectory.Open(IndexPath);
var analyzer = new StandardAnalyzer(Version.LUCENE_30, new
HashSet<string>());
this._indexWriter = new IndexWriter(directory, analyzer,
IndexWriter.MaxFieldLength.UNLIMITED);
}
~LuceneManager()
{
this.Dispose(false);
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool isDisposing)
{
if (!this._isDisposed)
{
if (this._indexWriter != null)
{
this._indexWriter.Dispose();
}
this._indexWriter = null;
this._isDisposed = true;
}
}
}
}
And the calling code looks like this:
namespace WpfApplication
{
using System.Windows;
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
var lucenceManager = new LuceneManager();
}
}
}
The app run just fine until I close it and it throws ObjectDisposedException as
described above.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira