diff --git a/src/Jackett.Common/Indexers/BaseIndexer.cs b/src/Jackett.Common/Indexers/BaseIndexer.cs index 876bdbf85..026a1b57d 100644 --- a/src/Jackett.Common/Indexers/BaseIndexer.cs +++ b/src/Jackett.Common/Indexers/BaseIndexer.cs @@ -289,22 +289,26 @@ namespace Jackett.Common.Indexers public virtual async Task ResultsForQuery(TorznabQuery query, bool isMetaIndexer) { - if (!CanHandleQuery(query) || !CanHandleCategories(query, isMetaIndexer)) + // we make a copy just in case some C# indexer modifies the object. + // without the copy, if you make a request with several indexers, all indexers share the query object. + var queryCopy = query.Clone(); + + if (!CanHandleQuery(queryCopy) || !CanHandleCategories(queryCopy, isMetaIndexer)) return new IndexerResult(this, new ReleaseInfo[0], false); - if (query.Cache) + if (queryCopy.Cache) { - var cachedReleases = cacheService.Search(this, query); + var cachedReleases = cacheService.Search(this, queryCopy); if (cachedReleases != null) return new IndexerResult(this, cachedReleases, true); } try { - var results = await PerformQuery(query); - results = FilterResults(query, results); - results = FixResults(query, results); - cacheService.CacheResults(this, query, results.ToList()); + var results = await PerformQuery(queryCopy); + results = FilterResults(queryCopy, results); + results = FixResults(queryCopy, results); + cacheService.CacheResults(this, queryCopy, results.ToList()); errorCount = 0; expireAt = DateTime.Now.Add(HealthyStatusValidity); return new IndexerResult(this, results, false); diff --git a/src/Jackett.Common/Indexers/Meta/BaseMetaIndexer.cs b/src/Jackett.Common/Indexers/Meta/BaseMetaIndexer.cs index 1b3055659..625199602 100644 --- a/src/Jackett.Common/Indexers/Meta/BaseMetaIndexer.cs +++ b/src/Jackett.Common/Indexers/Meta/BaseMetaIndexer.cs @@ -72,7 +72,7 @@ namespace Jackett.Common.Indexers.Meta var fallbackStrategies = fallbackStrategyProvider.FallbackStrategiesForQuery(query); var fallbackQueries = fallbackStrategies.Select(async f => await f.FallbackQueries()).SelectMany(t => t.Result); - var fallbackTasks = fallbackQueries.SelectMany(q => indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.ResultsForQuery(q.Clone(), true))); + var fallbackTasks = fallbackQueries.SelectMany(q => indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.ResultsForQuery(q, true))); var tasks = supportedTasks.Concat(fallbackTasks.ToList()); // explicit conversion to List to execute LINQ query // When there are many indexers used by a metaindexer querying each and every one of them can take very very