private void doCleanup() { lock (activeLocks) { List <String> dropKey = new List <String>(); foreach (String key in activeLocks.Keys) { Lock l = activeLocks[key]; if (l.isWriteLock) { if (l.lockCreation.AddMinutes(W_TIMEOUT).CompareTo(new DateTime()) < 0) { if (DBTransferManager.getManager(null).abortDownload(key)) { dropKey.Add(key); //activeLocks.Remove(key); } else { l.lockCreation = l.lockCreation.AddMinutes(W_TIMEOUT); } } } else { if (l.lockCreation.AddMinutes(R_TIMEOUT).CompareTo(new DateTime()) < 0) { dropKey.Add(key); //((ILocks)(this)).releaseReadLock(key); //activeLocks.Remove(key); } } } //forEach ILocks ilock = (ILocks)this; foreach (string s in dropKey) { Lock l = activeLocks[s]; if (l.isWriteLock) { ilock.releaseWriteLock(s); } else { ilock.releaseReadLock(s); } } } //lock }
void ILocks.releaseWriteLock(string filePath) { lock (activeLocks) { if (!activeLocks.ContainsKey(filePath)) { Console.WriteLine("WARNING: attempt to release non-acquired WRITE lock"); return; } distLockMgr.releaseWriteLock(filePath); if (!activeLocks.Remove(filePath)) { Console.WriteLine("ERROR: releaseWriteLock did not remove from local db"); } } }