remove no longer needed lock
This commit is contained in:
		| @@ -151,16 +151,13 @@ namespace keepass2android | ||||
| 					BroadcastDatabaseAction(LocaleManager.LocalizedAppContext, Strings.ActionCloseDatabase); | ||||
|  | ||||
|                     // Couldn't quick-lock, so unload database(s) instead | ||||
|                      | ||||
|                     lock (_openDatabasesLock) | ||||
|                     { | ||||
|                         _openAttempts.Clear(); | ||||
|                         _openDatabases.Clear(); | ||||
|                     _openAttempts.Clear(); | ||||
|                     _openDatabases.Clear(); | ||||
|  | ||||
|                         _currentDatabase = null; | ||||
|                         LastOpenedEntry = null; | ||||
|                         QuickLocked = false; | ||||
|                     } | ||||
|                     _currentDatabase = null; | ||||
|                     LastOpenedEntry = null; | ||||
|                     QuickLocked = false; | ||||
|                      | ||||
| 				     | ||||
| 				} | ||||
| 			} | ||||
| @@ -226,32 +223,30 @@ namespace keepass2android | ||||
|  | ||||
|  | ||||
|  | ||||
|             lock (_openDatabasesLock) | ||||
|              | ||||
|             if ((_currentDatabase == null) || makeCurrent) _currentDatabase = newDb; | ||||
|  | ||||
|             bool replacedOpenDatabase = false; | ||||
|             for (int i = 0; i < _openDatabases.Count; i++) | ||||
|             { | ||||
|                 if ((_currentDatabase == null) || makeCurrent) _currentDatabase = newDb; | ||||
|  | ||||
|                 bool replacedOpenDatabase = false; | ||||
|                 for (int i = 0; i < _openDatabases.Count; i++) | ||||
|                 if (_openDatabases[i].Ioc.IsSameFileAs(ioConnectionInfo)) | ||||
|                 { | ||||
|                     if (_openDatabases[i].Ioc.IsSameFileAs(ioConnectionInfo)) | ||||
|                     if (_currentDatabase == _openDatabases[i]) | ||||
|                     { | ||||
|                         if (_currentDatabase == _openDatabases[i]) | ||||
|                         { | ||||
|                             _currentDatabase = newDb; | ||||
|                         } | ||||
|  | ||||
|                         replacedOpenDatabase = true; | ||||
|                         _openDatabases[i] = newDb; | ||||
|  | ||||
|                         break; | ||||
|                         _currentDatabase = newDb; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 if (!replacedOpenDatabase) | ||||
|                     replacedOpenDatabase = true; | ||||
|                     _openDatabases[i] = newDb; | ||||
|  | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (!replacedOpenDatabase) | ||||
|                 { | ||||
|                     _openDatabases.Add(newDb); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -311,27 +306,24 @@ namespace keepass2android | ||||
|  | ||||
| 	    public void CloseDatabase(Database db) | ||||
| 	    { | ||||
|             lock (_openDatabasesLock) | ||||
|              | ||||
|             if (!_openDatabases.Contains(db)) | ||||
|                 throw new Exception("Cannot close database which is not open!"); | ||||
|             if (_openDatabases.Count == 1) | ||||
|             { | ||||
| 				//TODO check that Lock() below works without a deadlock | ||||
|                 if (!_openDatabases.Contains(db)) | ||||
|                     throw new Exception("Cannot close database which is not open!"); | ||||
|                 if (_openDatabases.Count == 1) | ||||
|                 { | ||||
|                     Lock(false); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 if (LastOpenedEntry != null && db.EntriesById.ContainsKey(LastOpenedEntry.Uuid)) | ||||
|                 { | ||||
|                     LastOpenedEntry = null; | ||||
|                 } | ||||
|  | ||||
|                 _openDatabases.Remove(db); | ||||
|                 if (_currentDatabase == db) | ||||
|                     _currentDatabase = _openDatabases.First(); | ||||
|                 Lock(false); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             if (LastOpenedEntry != null && db.EntriesById.ContainsKey(LastOpenedEntry.Uuid)) | ||||
|             { | ||||
|                 LastOpenedEntry = null; | ||||
|             } | ||||
|  | ||||
|             _openDatabases.Remove(db); | ||||
|             if (_currentDatabase == db) | ||||
|                     _currentDatabase = _openDatabases.First(); | ||||
|  | ||||
|             UpdateOngoingNotification(); | ||||
|             //TODO broadcast event so affected activities can close/update?  | ||||
| 	    } | ||||
| @@ -408,7 +400,7 @@ namespace keepass2android | ||||
|  | ||||
|         private readonly List<IOConnectionInfo> _openAttempts = new List<IOConnectionInfo>(); //stores which files have been attempted to open. Used to avoid that we repeatedly try to load files which failed to load. | ||||
| 	    private readonly List<Database> _openDatabases = new List<Database>(); | ||||
| 		private readonly object _openDatabasesLock = new object(); | ||||
| 		 | ||||
| 	    private readonly List<IOConnectionInfo> _childDatabases = new List<IOConnectionInfo>(); //list of databases which were opened as child databases | ||||
|         private Database _currentDatabase; | ||||
|  | ||||
| @@ -416,11 +408,7 @@ namespace keepass2android | ||||
| 	    { | ||||
|             get | ||||
|             { | ||||
|                 lock (_openDatabasesLock) | ||||
|                 { | ||||
|                     //avoid concurrent access to _openDatabases | ||||
|                     return new List<Database>(_openDatabases); | ||||
|                 } | ||||
|                 return _openDatabases; | ||||
|             } | ||||
| 	    } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Crocoll
					Philipp Crocoll