aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common.Implementations
diff options
context:
space:
mode:
authorT. Adams <t.adams88@gmail.com>2015-04-03 11:04:25 -0700
committerT. Adams <t.adams88@gmail.com>2015-04-03 11:04:25 -0700
commitabf12569ba2aa31ea3a00e4faf3adad2f740cbd9 (patch)
tree47c57c6361825491d38e3def6b716926ddd9aa59 /MediaBrowser.Common.Implementations
parent46c92107490263f8e6abefbd2259780013fa195d (diff)
parentef505c8e9e2b8f348aeaa89be6bc446014b72996 (diff)
Merging in latest dev
Diffstat (limited to 'MediaBrowser.Common.Implementations')
-rw-r--r--MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs32
-rw-r--r--MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs37
2 files changed, 41 insertions, 28 deletions
diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
index b925649fc..94c91c55a 100644
--- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
+++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs
@@ -107,30 +107,40 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
private WebRequest GetRequest(HttpRequestOptions options, string method, bool enableHttpCompression)
{
- var request = (HttpWebRequest)WebRequest.Create(options.Url);
+ var request = WebRequest.Create(options.Url);
+ var httpWebRequest = request as HttpWebRequest;
- AddRequestHeaders(request, options);
+ if (httpWebRequest != null)
+ {
+ AddRequestHeaders(httpWebRequest, options);
- request.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None;
+ httpWebRequest.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None;
+ }
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache);
- if (options.EnableKeepAlive)
+ if (httpWebRequest != null)
{
- request.KeepAlive = true;
+ if (options.EnableKeepAlive)
+ {
+ httpWebRequest.KeepAlive = true;
+ }
}
request.Method = method;
request.Timeout = options.TimeoutMs;
- if (!string.IsNullOrEmpty(options.Host))
+ if (httpWebRequest != null)
{
- request.Host = options.Host;
- }
+ if (!string.IsNullOrEmpty(options.Host))
+ {
+ httpWebRequest.Host = options.Host;
+ }
- if (!string.IsNullOrEmpty(options.Referer))
- {
- request.Referer = options.Referer;
+ if (!string.IsNullOrEmpty(options.Referer))
+ {
+ httpWebRequest.Referer = options.Referer;
+ }
}
//request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback;
diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs
index 4f84652c6..de7987bd2 100644
--- a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs
+++ b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs
@@ -6,6 +6,7 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Tasks;
using System;
+using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@@ -29,7 +30,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
/// <summary>
/// The _task queue
/// </summary>
- private readonly SortedDictionary<Type, TaskExecutionOptions> _taskQueue = new SortedDictionary<Type, TaskExecutionOptions>();
+ private readonly ConcurrentQueue<Tuple<Type, TaskExecutionOptions>> _taskQueue =
+ new ConcurrentQueue<Tuple<Type, TaskExecutionOptions>>();
/// <summary>
/// Gets or sets the json serializer.
@@ -136,25 +138,17 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
{
var type = task.ScheduledTask.GetType();
+ Logger.Info("Queueing task {0}", type.Name);
+
lock (_taskQueue)
{
- // If it's idle just execute immediately
if (task.State == TaskState.Idle)
{
Execute(task, options);
return;
}
- if (!_taskQueue.ContainsKey(type))
- {
- Logger.Info("Queueing task {0}", type.Name);
- _taskQueue.Add(type, options);
- }
- else
- {
- _taskQueue[type] = options;
- Logger.Info("Task already queued: {0}", type.Name);
- }
+ _taskQueue.Enqueue(new Tuple<Type, TaskExecutionOptions>(type, options));
}
}
@@ -241,15 +235,24 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
// Execute queued tasks
lock (_taskQueue)
{
- foreach (var enqueuedType in _taskQueue.ToList())
+ var list = new List<Tuple<Type, TaskExecutionOptions>>();
+
+ Tuple<Type, TaskExecutionOptions> item;
+ while (_taskQueue.TryDequeue(out item))
{
- var scheduledTask = ScheduledTasks.First(t => t.ScheduledTask.GetType() == enqueuedType.Key);
+ if (list.All(i => i.Item1 != item.Item1))
+ {
+ list.Add(item);
+ }
+ }
+
+ foreach (var enqueuedType in list)
+ {
+ var scheduledTask = ScheduledTasks.First(t => t.ScheduledTask.GetType() == enqueuedType.Item1);
if (scheduledTask.State == TaskState.Idle)
{
- Execute(scheduledTask, enqueuedType.Value);
-
- _taskQueue.Remove(enqueuedType.Key);
+ Execute(scheduledTask, enqueuedType.Item2);
}
}
}