From 134f86e8d5c414409631b25b8c6f0ee45fbd8631 Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Thu, 3 Nov 2016 21:44:39 +1000
Subject: Initial update to OpenSim 0.8.2.1 source code.
---
ThirdParty/SmartThreadPool/WorkItemFactory.cs | 628 +++++++++++++-------------
1 file changed, 319 insertions(+), 309 deletions(-)
(limited to 'ThirdParty/SmartThreadPool/WorkItemFactory.cs')
diff --git a/ThirdParty/SmartThreadPool/WorkItemFactory.cs b/ThirdParty/SmartThreadPool/WorkItemFactory.cs
index dfcb54f..16ccd81 100644
--- a/ThirdParty/SmartThreadPool/WorkItemFactory.cs
+++ b/ThirdParty/SmartThreadPool/WorkItemFactory.cs
@@ -1,148 +1,152 @@
-// Ami Bar
-// amibar@gmail.com
-
using System;
namespace Amib.Threading.Internal
{
- #region WorkItemFactory class
-
- public class WorkItemFactory
- {
- ///
- /// Create a new work item
- ///
+ #region WorkItemFactory class
+
+ public class WorkItemFactory
+ {
+ ///
+ /// Create a new work item
+ ///
+ /// The WorkItemsGroup of this workitem
+ /// Work item group start information
+ /// A callback to execute
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback)
+ {
+ return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null);
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The WorkItemsGroup of this workitem
/// Work item group start information
- /// A callback to execute
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback)
- {
- return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null);
- }
-
- ///
- /// Create a new work item
- ///
- /// Work item group start information
- /// A callback to execute
- /// The priority of the work item
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback,
- WorkItemPriority workItemPriority)
- {
- return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null, workItemPriority);
- }
-
- ///
- /// Create a new work item
- ///
+ /// A callback to execute
+ /// The priority of the work item
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ WorkItemPriority workItemPriority)
+ {
+ return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null, workItemPriority);
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The WorkItemsGroup of this workitem
/// Work item group start information
- /// Work item info
- /// A callback to execute
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemInfo workItemInfo,
- WorkItemCallback callback)
- {
- return CreateWorkItem(
- workItemsGroup,
- wigStartInfo,
- workItemInfo,
- callback,
- null);
- }
-
- ///
- /// Create a new work item
- ///
+ /// Work item info
+ /// A callback to execute
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemInfo workItemInfo,
+ WorkItemCallback callback)
+ {
+ return CreateWorkItem(
+ workItemsGroup,
+ wigStartInfo,
+ workItemInfo,
+ callback,
+ null);
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The WorkItemsGroup of this workitem
/// Work item group start information
- /// A callback to execute
- ///
- /// The context object of the work item. Used for passing arguments to the work item.
- ///
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback,
- object state)
- {
- ValidateCallback(callback);
-
- WorkItemInfo workItemInfo = new WorkItemInfo();
- workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
- workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
- workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
- workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
- workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
-
- WorkItem workItem = new WorkItem(
- workItemsGroup,
- workItemInfo,
- callback,
- state);
- return workItem;
- }
-
- ///
- /// Create a new work item
- ///
- /// Work item group start information
- /// A callback to execute
- ///
- /// The context object of the work item. Used for passing arguments to the work item.
- ///
- /// The work item priority
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback,
- object state,
- WorkItemPriority workItemPriority)
- {
- ValidateCallback(callback);
-
- WorkItemInfo workItemInfo = new WorkItemInfo();
- workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
- workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
- workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
- workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
- workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
- workItemInfo.WorkItemPriority = workItemPriority;
-
- WorkItem workItem = new WorkItem(
- workItemsGroup,
- workItemInfo,
- callback,
- state);
-
- return workItem;
- }
-
- ///
- /// Create a new work item
- ///
- /// Work item group start information
- /// Work item information
- /// A callback to execute
- ///
- /// The context object of the work item. Used for passing arguments to the work item.
- ///
- /// Returns a work item
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state)
+ {
+ ValidateCallback(callback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+ workItemInfo.WorkItemPriority = wigStartInfo.WorkItemPriority;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The work items group
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ /// The work item priority
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ WorkItemPriority workItemPriority)
+ {
+ ValidateCallback(callback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+ workItemInfo.WorkItemPriority = workItemPriority;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The work items group
+ /// Work item group start information
+ /// Work item information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ /// Returns a work item
public static WorkItem CreateWorkItem(
IWorkItemsGroup workItemsGroup,
WIGStartInfo wigStartInfo,
- WorkItemInfo workItemInfo,
- WorkItemCallback callback,
+ WorkItemInfo workItemInfo,
+ WorkItemCallback callback,
object state)
{
ValidateCallback(callback);
@@ -151,183 +155,189 @@ namespace Amib.Threading.Internal
WorkItem workItem = new WorkItem(
workItemsGroup,
new WorkItemInfo(workItemInfo),
- callback,
+ callback,
state);
return workItem;
}
- ///
- /// Create a new work item
- ///
- /// Work item group start information
- /// A callback to execute
- ///
- /// The context object of the work item. Used for passing arguments to the work item.
- ///
- ///
- /// A delegate to call after the callback completion
- ///
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback,
- object state,
- PostExecuteWorkItemCallback postExecuteWorkItemCallback)
- {
- ValidateCallback(callback);
- ValidateCallback(postExecuteWorkItemCallback);
-
- WorkItemInfo workItemInfo = new WorkItemInfo();
- workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
- workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
- workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
- workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
- workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
-
- WorkItem workItem = new WorkItem(
- workItemsGroup,
- workItemInfo,
- callback,
- state);
-
- return workItem;
- }
-
- ///
- /// Create a new work item
- ///
- /// Work item group start information
- /// A callback to execute
- ///
- /// The context object of the work item. Used for passing arguments to the work item.
- ///
- ///
- /// A delegate to call after the callback completion
- ///
- /// The work item priority
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback,
- object state,
- PostExecuteWorkItemCallback postExecuteWorkItemCallback,
- WorkItemPriority workItemPriority)
- {
- ValidateCallback(callback);
- ValidateCallback(postExecuteWorkItemCallback);
-
- WorkItemInfo workItemInfo = new WorkItemInfo();
- workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
- workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
- workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
- workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
- workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
- workItemInfo.WorkItemPriority = workItemPriority;
-
- WorkItem workItem = new WorkItem(
- workItemsGroup,
- workItemInfo,
- callback,
- state);
-
- return workItem;
- }
-
- ///
- /// Create a new work item
- ///
- /// Work item group start information
- /// A callback to execute
- ///
- /// The context object of the work item. Used for passing arguments to the work item.
- ///
- ///
- /// A delegate to call after the callback completion
- ///
- /// Indicates on which cases to call to the post execute callback
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback,
- object state,
- PostExecuteWorkItemCallback postExecuteWorkItemCallback,
- CallToPostExecute callToPostExecute)
- {
- ValidateCallback(callback);
- ValidateCallback(postExecuteWorkItemCallback);
-
- WorkItemInfo workItemInfo = new WorkItemInfo();
- workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
- workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
- workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
- workItemInfo.CallToPostExecute = callToPostExecute;
- workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
-
- WorkItem workItem = new WorkItem(
- workItemsGroup,
- workItemInfo,
- callback,
- state);
-
- return workItem;
- }
-
- ///
- /// Create a new work item
- ///
- /// Work item group start information
- /// A callback to execute
- ///
- /// The context object of the work item. Used for passing arguments to the work item.
- ///
- ///
- /// A delegate to call after the callback completion
- ///
- /// Indicates on which cases to call to the post execute callback
- /// The work item priority
- /// Returns a work item
- public static WorkItem CreateWorkItem(
- IWorkItemsGroup workItemsGroup,
- WIGStartInfo wigStartInfo,
- WorkItemCallback callback,
- object state,
- PostExecuteWorkItemCallback postExecuteWorkItemCallback,
- CallToPostExecute callToPostExecute,
- WorkItemPriority workItemPriority)
- {
-
- ValidateCallback(callback);
- ValidateCallback(postExecuteWorkItemCallback);
-
- WorkItemInfo workItemInfo = new WorkItemInfo();
- workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
- workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
- workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
- workItemInfo.CallToPostExecute = callToPostExecute;
- workItemInfo.WorkItemPriority = workItemPriority;
- workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
-
- WorkItem workItem = new WorkItem(
- workItemsGroup,
- workItemInfo,
- callback,
- state);
-
- return workItem;
- }
-
- private static void ValidateCallback(Delegate callback)
- {
- if(callback.GetInvocationList().Length > 1)
- {
- throw new NotSupportedException("SmartThreadPool doesn't support delegates chains");
- }
- }
- }
-
- #endregion
+ ///
+ /// Create a new work item
+ ///
+ /// The work items group
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback)
+ {
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+ workItemInfo.WorkItemPriority = wigStartInfo.WorkItemPriority;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The work items group
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// The work item priority
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback,
+ WorkItemPriority workItemPriority)
+ {
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+ workItemInfo.WorkItemPriority = workItemPriority;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The work items group
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// Indicates on which cases to call to the post execute callback
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback,
+ CallToPostExecute callToPostExecute)
+ {
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = callToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+ workItemInfo.WorkItemPriority = wigStartInfo.WorkItemPriority;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// The work items group
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// Indicates on which cases to call to the post execute callback
+ /// The work item priority
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback,
+ CallToPostExecute callToPostExecute,
+ WorkItemPriority workItemPriority)
+ {
+
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = callToPostExecute;
+ workItemInfo.WorkItemPriority = workItemPriority;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ private static void ValidateCallback(Delegate callback)
+ {
+ if (callback != null && callback.GetInvocationList().Length > 1)
+ {
+ throw new NotSupportedException("SmartThreadPool doesn't support delegates chains");
+ }
+ }
+ }
+
+ #endregion
}
--
cgit v1.1