lucenenet-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Maximilian Haru Raditya (JIRA)" <j...@apache.org>
Subject [jira] [Created] (LUCENENET-511) ObjectDisposedException thrown when IndexWriter disposed by finalizer
Date Mon, 01 Oct 2012 22:41:09 GMT
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

Mime
View raw message