From eb612bd303b1ff7adf44f38496448b6064c465fe Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 19 Apr 2013 16:27:02 -0400 Subject: fixed db disposals --- .../HttpServer/HttpServer.cs | 11 +++++- .../Sqlite/SQLiteRepository.cs | 45 ++++++++++++---------- 2 files changed, 34 insertions(+), 22 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs index 4f93f4b6e..01b867bdb 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs @@ -1,4 +1,3 @@ -using System.IO; using Funq; using MediaBrowser.Common; using MediaBrowser.Common.Extensions; @@ -17,6 +16,7 @@ using ServiceStack.WebHost.Endpoints.Support; using System; using System.Collections.Generic; using System.Globalization; +using System.IO; using System.Linq; using System.Net; using System.Net.WebSockets; @@ -498,6 +498,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer _logger.Info("Calling ServiceStack AppHost.Init"); Init(); } + + /// + /// Releases the specified instance. + /// + /// The instance. + public override void Release(object instance) + { + // Leave this empty so SS doesn't try to dispose our objects + } } /// diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs index 6824442f1..6179af1cb 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs @@ -160,27 +160,30 @@ namespace MediaBrowser.Server.Implementations.Sqlite { try { - if (connection != null) + lock (this) { - if (EnableDelayedCommands) + if (connection != null) { - FlushOnDispose(); + if (EnableDelayedCommands) + { + FlushOnDispose(); + } + + if (connection.IsOpen()) + { + connection.Close(); + } + + connection.Dispose(); + connection = null; } - - if (connection.IsOpen()) + + if (FlushTimer != null) { - connection.Close(); + FlushTimer.Dispose(); + FlushTimer = null; } - - connection.Dispose(); - } - - if (FlushTimer != null) - { - FlushTimer.Dispose(); - FlushTimer = null; } - } catch (Exception ex) { @@ -195,13 +198,13 @@ namespace MediaBrowser.Server.Implementations.Sqlite private void FlushOnDispose() { // If we're not already flushing, do it now - if (!IsFlushing) + if (!_isFlushing) { Flush(null); } // Don't dispose in the middle of a flush - while (IsFlushing) + while (_isFlushing) { Thread.Sleep(25); } @@ -225,7 +228,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite /// /// The is flushing /// - private bool IsFlushing; + private bool _isFlushing; /// /// Flushes the specified sender. @@ -241,12 +244,12 @@ namespace MediaBrowser.Server.Implementations.Sqlite return; } - if (IsFlushing) + if (_isFlushing) { return; } - IsFlushing = true; + _isFlushing = true; var numCommands = 0; using (var tran = connection.BeginTransaction()) @@ -278,7 +281,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite Logger.Debug("SQL Delayed writer executed " + numCommands + " commands"); FlushTimer.Change(TimeSpan.FromMilliseconds(FlushInterval), TimeSpan.FromMilliseconds(-1)); - IsFlushing = false; + _isFlushing = false; } /// -- cgit v1.2.3