diff --git a/p4api.net/P4Server.cs b/p4api.net/P4Server.cs index 8b2eae3..e52de35 100644 --- a/p4api.net/P4Server.cs +++ b/p4api.net/P4Server.cs @@ -83,7 +83,7 @@ public partial class P4Server : IDisposable { public IKeepAlive KeepAlive { get; set; } - internal object Sync = new object(); + internal readonly object Sync = new object(); private Dictionary _lastResultsCache; /// @@ -93,20 +93,24 @@ public P4CommandResult LastResults { get { - if (_lastResultsCache.ContainsKey(System.Threading.Thread.CurrentThread.ManagedThreadId)) + lock (Sync) { - return _lastResultsCache[System.Threading.Thread.CurrentThread.ManagedThreadId]; + if (_lastResultsCache != null && _lastResultsCache.ContainsKey(System.Threading.Thread.CurrentThread.ManagedThreadId)) + { + return _lastResultsCache[System.Threading.Thread.CurrentThread.ManagedThreadId]; + } + return null; } - return null; } internal set { - if (_lastResultsCache == null) - { - _lastResultsCache = new Dictionary(); - } - lock (_lastResultsCache) + lock (Sync) { + if (_lastResultsCache == null) + { + _lastResultsCache = new Dictionary(); + } + if (_lastResultsCache.Count > 32) { // if the results cache is getting large, throw away anything older than 10 seconds