Lock CommandQueueManager.PushMany too

pull/395/head
Taloth Saldono 5 years ago committed by ta264
parent e39fee9209
commit f94a286479

@ -57,39 +57,42 @@ namespace NzbDrone.Core.Messaging.Commands
{ {
_logger.Trace("Publishing {0} commands", commands.Count); _logger.Trace("Publishing {0} commands", commands.Count);
var commandModels = new List<CommandModel>(); lock (_commandQueue)
var existingCommands = _commandQueue.QueuedOrStarted();
foreach (var command in commands)
{ {
var existing = existingCommands.SingleOrDefault(c => c.Name == command.Name && CommandEqualityComparer.Instance.Equals(c.Body, command)); var commandModels = new List<CommandModel>();
var existingCommands = _commandQueue.QueuedOrStarted();
if (existing != null) foreach (var command in commands)
{ {
continue; var existing = existingCommands.FirstOrDefault(c => c.Name == command.Name && CommandEqualityComparer.Instance.Equals(c.Body, command));
if (existing != null)
{
continue;
}
var commandModel = new CommandModel
{
Name = command.Name,
Body = command,
QueuedAt = DateTime.UtcNow,
Trigger = CommandTrigger.Unspecified,
Priority = CommandPriority.Normal,
Status = CommandStatus.Queued
};
commandModels.Add(commandModel);
} }
var commandModel = new CommandModel _repo.InsertMany(commandModels);
{
Name = command.Name,
Body = command,
QueuedAt = DateTime.UtcNow,
Trigger = CommandTrigger.Unspecified,
Priority = CommandPriority.Normal,
Status = CommandStatus.Queued
};
commandModels.Add(commandModel);
}
_repo.InsertMany(commandModels); foreach (var commandModel in commandModels)
{
_commandQueue.Add(commandModel);
}
foreach (var commandModel in commandModels) return commandModels;
{
_commandQueue.Add(commandModel);
} }
return commandModels;
} }
public CommandModel Push<TCommand>(TCommand command, CommandPriority priority = CommandPriority.Normal, CommandTrigger trigger = CommandTrigger.Unspecified) public CommandModel Push<TCommand>(TCommand command, CommandPriority priority = CommandPriority.Normal, CommandTrigger trigger = CommandTrigger.Unspecified)

Loading…
Cancel
Save