|
From: <fab...@us...> - 2010-10-13 12:55:22
|
Revision: 5250
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5250&view=rev
Author: fabiomaulo
Date: 2010-10-13 12:55:16 +0000 (Wed, 13 Oct 2010)
Log Message:
-----------
Fix NH-2376
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Event/EventListeners.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs
Modified: trunk/nhibernate/src/NHibernate/Event/EventListeners.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2010-10-12 21:27:00 UTC (rev 5249)
+++ trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2010-10-13 12:55:16 UTC (rev 5250)
@@ -626,23 +626,31 @@
return this;
}
- public void DestroyListeners()
- {
- try
- {
- foreach (object i in initializedListeners)
- {
- IDestructible destructible = i as IDestructible;
- if (destructible != null)
- {
- destructible.Cleanup();
- }
- }
- }
- catch (Exception e)
- {
- throw new HibernateException("could not destruct listeners", e);
- }
- }
+ public void DestroyListeners()
+ {
+ try
+ {
+ foreach (object i in initializedListeners)
+ {
+ var destructible = i as IDestructible;
+ if (destructible != null)
+ {
+ destructible.Cleanup();
+ }
+ else
+ {
+ var disposable = i as IDisposable;
+ if (disposable != null)
+ {
+ disposable.Dispose();
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ throw new HibernateException("could not destruct/dispose listeners", e);
+ }
+ }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs 2010-10-13 12:55:16 UTC (rev 5250)
@@ -0,0 +1,35 @@
+using System;
+using NHibernate.Cfg;
+using NHibernate.Event;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.Events
+{
+ public class MyDisposableListener : IPostUpdateEventListener, IDisposable
+ {
+ public void OnPostUpdate(PostUpdateEvent @event)
+ {
+ }
+
+ public bool DisposeCalled { get; private set; }
+ public void Dispose()
+ {
+ DisposeCalled = true;
+ }
+ }
+
+ public class DisposableListenersTest
+ {
+ [Test]
+ public void WhenCloseSessionFactoryThenCallDisposeOfListener()
+ {
+ Configuration cfg = TestConfigurationHelper.GetDefaultConfiguration();
+ var myDisposableListener = new MyDisposableListener();
+ cfg.AppendListeners(ListenerType.PostUpdate, new[]{myDisposableListener});
+ var sf = cfg.BuildSessionFactory();
+ sf.Close();
+ myDisposableListener.DisposeCalled.Should().Be.True();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 21:27:00 UTC (rev 5249)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-13 12:55:16 UTC (rev 5250)
@@ -196,6 +196,7 @@
<Compile Include="EngineTest\NativeSQLQueryNonScalarReturnTest.cs" />
<Compile Include="EngineTest\NativeSQLQueryScalarReturnTest.cs" />
<Compile Include="EngineTest\NativeSQLQuerySpecificationTest.cs" />
+ <Compile Include="Events\DisposableListenersTest.cs" />
<Compile Include="ExceptionsTest\NullQueryTest.cs" />
<Compile Include="ExpressionTest\RestrictionsFixture.cs" />
<Compile Include="Criteria\Student.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|