diff --git a/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs b/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs index e8fc4cf58..1071aebea 100644 --- a/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs +++ b/src/NzbDrone.Core/Messaging/Commands/CommandQueueManager.cs @@ -100,32 +100,35 @@ public CommandModel Push(TCommand command, CommandPriority priority = _logger.Trace("Publishing {0}", command.Name); _logger.Trace("Checking if command is queued or started: {0}", command.Name); - var existingCommands = QueuedOrStarted(command.Name); - var existing = existingCommands.SingleOrDefault(c => CommandEqualityComparer.Instance.Equals(c.Body, command)); - - if (existing != null) + lock (_commandQueue) { - _logger.Trace("Command is already in progress: {0}", command.Name); + var existingCommands = QueuedOrStarted(command.Name); + var existing = existingCommands.FirstOrDefault(c => CommandEqualityComparer.Instance.Equals(c.Body, command)); - return existing; + if (existing != null) + { + _logger.Trace("Command is already in progress: {0}", command.Name); + + return existing; + } + + var commandModel = new CommandModel + { + Name = command.Name, + Body = command, + QueuedAt = DateTime.UtcNow, + Trigger = trigger, + Priority = priority, + Status = CommandStatus.Queued + }; + + _logger.Trace("Inserting new command: {0}", commandModel.Name); + + _repo.Insert(commandModel); + _commandQueue.Add(commandModel); + + return commandModel; } - - var commandModel = new CommandModel - { - Name = command.Name, - Body = command, - QueuedAt = DateTime.UtcNow, - Trigger = trigger, - Priority = priority, - Status = CommandStatus.Queued - }; - - _logger.Trace("Inserting new command: {0}", commandModel.Name); - - _repo.Insert(commandModel); - _commandQueue.Add(commandModel); - - return commandModel; } public CommandModel Push(string commandName, DateTime? lastExecutionTime, DateTime? lastStartTime, CommandPriority priority = CommandPriority.Normal, CommandTrigger trigger = CommandTrigger.Unspecified)