static private CloseConnections ( ILog log ) : void | ||
log | ILog | |
리턴 | void |
internal static void CloseConnections(ILog log)
{
List<AmnesiaDbConnection> oldConnections = new List<AmnesiaDbConnection>();
lock (connections)
{
foreach (AmnesiaDbConnection c in connections.Values)
oldConnections.Add(c);
connections.Clear();
}
foreach (AmnesiaDbConnection connection in oldConnections)
{
try
{
using (LockConnection(connection))
{
if (connection.Real.State == ConnectionState.Open)
{
log.Write("Closing: " + connection.Real.ConnectionString);
connection.Real.Close();
}
else
{
log.Write("Already closed: " + connection.Real.ConnectionString);
}
}
}
catch { }
}
}
/// <summary> /// Calls must handle concurrency control /// </summary> static void Rollback(ILog log) { // mark the session as ended before doing any rollback work Session.ID = Guid.Empty; Session.IsRollbackPending = false; Session.CloseConnections(log); log.Write("Aborting transaction"); Session.Transaction.Rollback(); Session.Transaction.Dispose(); Session.Transaction = null; }