Remove unnecessary class variable

This commit is contained in:
Dean Herbert 2018-02-13 14:58:15 +09:00
parent 3561326306
commit ab34123ba8
1 changed files with 9 additions and 11 deletions

View File

@ -16,8 +16,6 @@ public class DatabaseContextFactory : IDatabaseContextFactory
private readonly object writeLock = new object();
private OsuDbContext writeContext;
private bool currentWriteDidWrite;
private volatile int currentWriteUsages;
@ -43,7 +41,7 @@ public DatabaseWriteUsage GetForWrite()
Interlocked.Increment(ref currentWriteUsages);
return new DatabaseWriteUsage(writeContext ?? (writeContext = threadContexts.Value), usageCompleted);
return new DatabaseWriteUsage(threadContexts.Value, usageCompleted);
}
private void usageCompleted(DatabaseWriteUsage usage)
@ -56,19 +54,12 @@ private void usageCompleted(DatabaseWriteUsage usage)
if (usages > 0) return;
if (currentWriteDidWrite)
{
writeContext.Dispose();
currentWriteDidWrite = false;
// once all writes are complete, we want to refresh thread-specific contexts to make sure they don't have stale local caches.
recycleThreadContexts();
}
// always set to null (even when a write didn't occur) so we get the correct thread context on next write request.
writeContext = null;
}
finally
{
@ -76,7 +67,14 @@ private void usageCompleted(DatabaseWriteUsage usage)
}
}
private void recycleThreadContexts() => threadContexts = new ThreadLocal<OsuDbContext>(CreateContext);
private void recycleThreadContexts()
{
if (threadContexts != null)
foreach (var context in threadContexts.Values)
context.Dispose();
threadContexts = new ThreadLocal<OsuDbContext>(CreateContext, true);
}
protected virtual OsuDbContext CreateContext()
{