From 4cec35daf8c72cafdb71e36ec95b79731f0a74e0 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 26 Aug 2015 14:41:12 -0700 Subject: [PATCH] Disposing the session when a transaction is rolled back --- src/Orchard/Data/SessionLocator.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Orchard/Data/SessionLocator.cs b/src/Orchard/Data/SessionLocator.cs index 5224a5b9e..73785702e 100644 --- a/src/Orchard/Data/SessionLocator.cs +++ b/src/Orchard/Data/SessionLocator.cs @@ -30,9 +30,9 @@ namespace Orchard.Data { } public class TransactionManager : ITransactionManager, IDisposable { - private readonly ISessionFactoryHolder _sessionFactoryHolder; private readonly IEnumerable _interceptors; private Func _contentManagerSessionFactory; + private readonly ISessionFactory _sessionFactory; private ISession _session; private IContentManagerSession _contentManagerSession; @@ -41,9 +41,9 @@ namespace Orchard.Data { ISessionFactoryHolder sessionFactoryHolder, Func contentManagerSessionFactory, IEnumerable interceptors) { - _sessionFactoryHolder = sessionFactoryHolder; _interceptors = interceptors; _contentManagerSessionFactory = contentManagerSessionFactory; + _sessionFactory = sessionFactoryHolder.GetSessionFactory(); Logger = NullLogger.Instance; IsolationLevel = IsolationLevel.ReadCommitted; @@ -74,6 +74,7 @@ namespace Orchard.Data { if (_session != null && _session.Transaction.IsActive) { Logger.Debug("Rolling back transaction"); _session.Transaction.Rollback(); + DisposeSession(); } } @@ -106,10 +107,9 @@ namespace Orchard.Data { if (_session != null) { return; } - - var sessionFactory = _sessionFactoryHolder.GetSessionFactory(); + Logger.Debug("Opening NHibernate session"); - _session = sessionFactory.OpenSession(new OrchardSessionInterceptor(_interceptors.ToArray(), Logger)); + _session = _sessionFactory.OpenSession(new OrchardSessionInterceptor(_interceptors.ToArray(), Logger)); _session.BeginTransaction(level); _contentManagerSession = _contentManagerSessionFactory(); }