diff options
Diffstat (limited to '')
10 files changed, 65 insertions, 32 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLRegionData.cs b/OpenSim/Data/MSSQL/MSSQLRegionData.cs index c9e4bfe..adedcce 100644 --- a/OpenSim/Data/MSSQL/MSSQLRegionData.cs +++ b/OpenSim/Data/MSSQL/MSSQLRegionData.cs | |||
@@ -210,6 +210,7 @@ namespace OpenSim.Data.MSSQL | |||
210 | { | 210 | { |
211 | foreach (SceneObjectPart objectPart in allPrimsWithInventory) | 211 | foreach (SceneObjectPart objectPart in allPrimsWithInventory) |
212 | { | 212 | { |
213 | command.Parameters.Clear(); | ||
213 | command.Parameters.Add(_Database.CreateParameter("@PrimID", objectPart.UUID)); | 214 | command.Parameters.Add(_Database.CreateParameter("@PrimID", objectPart.UUID)); |
214 | 215 | ||
215 | List<TaskInventoryItem> inventory = new List<TaskInventoryItem>(); | 216 | List<TaskInventoryItem> inventory = new List<TaskInventoryItem>(); |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index bbb0ae2..58344f3 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -1169,5 +1169,27 @@ namespace OpenSim.Framework | |||
1169 | 1169 | ||
1170 | return found.ToArray(); | 1170 | return found.ToArray(); |
1171 | } | 1171 | } |
1172 | |||
1173 | #region FireAndForget Threading Pattern | ||
1174 | |||
1175 | public static void FireAndForget(System.Threading.WaitCallback callback) | ||
1176 | { | ||
1177 | callback.BeginInvoke(null, EndFireAndForget, callback); | ||
1178 | } | ||
1179 | |||
1180 | public static void FireAndForget(System.Threading.WaitCallback callback, object obj) | ||
1181 | { | ||
1182 | callback.BeginInvoke(obj, EndFireAndForget, callback); | ||
1183 | } | ||
1184 | |||
1185 | private static void EndFireAndForget(IAsyncResult ar) | ||
1186 | { | ||
1187 | System.Threading.WaitCallback callback = (System.Threading.WaitCallback)ar.AsyncState; | ||
1188 | |||
1189 | callback.EndInvoke(ar); | ||
1190 | ar.AsyncWaitHandle.Close(); | ||
1191 | } | ||
1192 | |||
1193 | #endregion FireAndForget Threading Pattern | ||
1172 | } | 1194 | } |
1173 | } | 1195 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index 4ee90e2..f73a7e3 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |||
@@ -199,6 +199,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
199 | InventoryFolderImpl inventoryFolder = null; | 199 | InventoryFolderImpl inventoryFolder = null; |
200 | InventoryItemBase inventoryItem = null; | 200 | InventoryItemBase inventoryItem = null; |
201 | 201 | ||
202 | /* | ||
202 | if (!m_userInfo.HasReceivedInventory) | 203 | if (!m_userInfo.HasReceivedInventory) |
203 | { | 204 | { |
204 | // If the region server has access to the user admin service (by which users are created), | 205 | // If the region server has access to the user admin service (by which users are created), |
@@ -220,13 +221,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
220 | m_userInfo.FetchInventory(); | 221 | m_userInfo.FetchInventory(); |
221 | } | 222 | } |
222 | } | 223 | } |
224 | */ | ||
223 | 225 | ||
224 | bool foundStar = false; | 226 | bool foundStar = false; |
225 | 227 | ||
226 | // Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl | 228 | // Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl |
227 | // itself (possibly at a small loss in efficiency). | 229 | // itself (possibly at a small loss in efficiency). |
228 | string[] components | 230 | string[] components |
229 | = m_invPath.Split(new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries); | 231 | = m_invPath.Split( |
232 | new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries); | ||
230 | 233 | ||
231 | int maxComponentIndex = components.Length - 1; | 234 | int maxComponentIndex = components.Length - 1; |
232 | 235 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index d3ba5fe..c495e02 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | |||
@@ -64,6 +64,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
64 | /// </value> | 64 | /// </value> |
65 | private Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>(); | 65 | private Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>(); |
66 | private Scene m_aScene; | 66 | private Scene m_aScene; |
67 | |||
67 | /// <value> | 68 | /// <value> |
68 | /// The comms manager we will use for all comms requests | 69 | /// The comms manager we will use for all comms requests |
69 | /// </value> | 70 | /// </value> |
@@ -110,8 +111,30 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
110 | InventoryArchiveSaved handlerInventoryArchiveSaved = OnInventoryArchiveSaved; | 111 | InventoryArchiveSaved handlerInventoryArchiveSaved = OnInventoryArchiveSaved; |
111 | if (handlerInventoryArchiveSaved != null) | 112 | if (handlerInventoryArchiveSaved != null) |
112 | handlerInventoryArchiveSaved(succeeded, userInfo, invPath, saveStream, reportedException); | 113 | handlerInventoryArchiveSaved(succeeded, userInfo, invPath, saveStream, reportedException); |
114 | } | ||
115 | |||
116 | public void ArchiveInventory(string firstName, string lastName, string invPath, Stream saveStream) | ||
117 | { | ||
118 | if (m_scenes.Count > 0) | ||
119 | { | ||
120 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName); | ||
121 | |||
122 | if (userInfo != null) | ||
123 | new InventoryArchiveWriteRequest(this, userInfo, invPath, saveStream).Execute(); | ||
124 | } | ||
125 | } | ||
126 | |||
127 | public void ArchiveInventory(string firstName, string lastName, string invPath, string savePath) | ||
128 | { | ||
129 | if (m_scenes.Count > 0) | ||
130 | { | ||
131 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName); | ||
132 | |||
133 | if (userInfo != null) | ||
134 | new InventoryArchiveWriteRequest(this, userInfo, invPath, savePath).Execute(); | ||
135 | } | ||
113 | } | 136 | } |
114 | 137 | ||
115 | public void DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream) | 138 | public void DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream) |
116 | { | 139 | { |
117 | if (m_scenes.Count > 0) | 140 | if (m_scenes.Count > 0) |
@@ -125,18 +148,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
125 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); | 148 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); |
126 | } | 149 | } |
127 | } | 150 | } |
128 | } | 151 | } |
129 | |||
130 | public void ArchiveInventory(string firstName, string lastName, string invPath, Stream saveStream) | ||
131 | { | ||
132 | if (m_scenes.Count > 0) | ||
133 | { | ||
134 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName); | ||
135 | |||
136 | if (userInfo != null) | ||
137 | new InventoryArchiveWriteRequest(this, userInfo, invPath, saveStream).Execute(); | ||
138 | } | ||
139 | } | ||
140 | 152 | ||
141 | public void DearchiveInventory(string firstName, string lastName, string invPath, string loadPath) | 153 | public void DearchiveInventory(string firstName, string lastName, string invPath, string loadPath) |
142 | { | 154 | { |
@@ -151,18 +163,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
151 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); | 163 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); |
152 | } | 164 | } |
153 | } | 165 | } |
154 | } | 166 | } |
155 | |||
156 | public void ArchiveInventory(string firstName, string lastName, string invPath, string savePath) | ||
157 | { | ||
158 | if (m_scenes.Count > 0) | ||
159 | { | ||
160 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName); | ||
161 | |||
162 | if (userInfo != null) | ||
163 | new InventoryArchiveWriteRequest(this, userInfo, invPath, savePath).Execute(); | ||
164 | } | ||
165 | } | ||
166 | 167 | ||
167 | /// <summary> | 168 | /// <summary> |
168 | /// Load inventory from an inventory file archive | 169 | /// Load inventory from an inventory file archive |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs index 621e9d2..7b4e374 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs | |||
@@ -272,7 +272,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
272 | 272 | ||
273 | if (asset != null) | 273 | if (asset != null) |
274 | { | 274 | { |
275 | handler.BeginInvoke(id, sender, asset, null, null); | 275 | Util.FireAndForget(delegate { handler(id, sender, asset); }); |
276 | return true; | 276 | return true; |
277 | } | 277 | } |
278 | 278 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs index b13a116..fd3aaf4 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs | |||
@@ -211,7 +211,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
211 | 211 | ||
212 | if (asset != null) | 212 | if (asset != null) |
213 | { | 213 | { |
214 | handler.BeginInvoke(id, sender, asset, null, null); | 214 | Util.FireAndForget(delegate { handler(id, sender, asset); }); |
215 | return true; | 215 | return true; |
216 | } | 216 | } |
217 | 217 | ||
@@ -219,8 +219,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
219 | { | 219 | { |
220 | if ((a != null) && (m_Cache != null)) | 220 | if ((a != null) && (m_Cache != null)) |
221 | m_Cache.Cache(a); | 221 | m_Cache.Cache(a); |
222 | 222 | ||
223 | handler.BeginInvoke(assetID, s, a, null, null); | 223 | Util.FireAndForget(delegate { handler(assetID, s, a); }); |
224 | }); | 224 | }); |
225 | } | 225 | } |
226 | 226 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 55b100b..fddba86 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -457,6 +457,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
457 | 457 | ||
458 | void SendInventoryComplete(IAsyncResult iar) | 458 | void SendInventoryComplete(IAsyncResult iar) |
459 | { | 459 | { |
460 | SendInventoryDelegate d = (SendInventoryDelegate)iar.AsyncState; | ||
461 | d.EndInvoke(iar); | ||
460 | } | 462 | } |
461 | 463 | ||
462 | /// <summary> | 464 | /// <summary> |
@@ -622,6 +624,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
622 | 624 | ||
623 | private void PurgeFolderCompleted(IAsyncResult iar) | 625 | private void PurgeFolderCompleted(IAsyncResult iar) |
624 | { | 626 | { |
627 | PurgeFolderDelegate d = (PurgeFolderDelegate)iar.AsyncState; | ||
628 | d.EndInvoke(iar); | ||
625 | } | 629 | } |
626 | } | 630 | } |
627 | } | 631 | } |
diff --git a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs index d9748d4..ffc8e4c 100644 --- a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs +++ b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs | |||
@@ -177,7 +177,7 @@ namespace OpenSim.Services.Connectors | |||
177 | } | 177 | } |
178 | else | 178 | else |
179 | { | 179 | { |
180 | handler.BeginInvoke(id, sender, asset, null, null); | 180 | Util.FireAndForget(delegate { handler(id, sender, asset); }); |
181 | } | 181 | } |
182 | 182 | ||
183 | return true; | 183 | return true; |
diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index a2261ba..cef678d 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs | |||
@@ -461,6 +461,8 @@ namespace OpenSim.Services.Connectors | |||
461 | 461 | ||
462 | private void MoveItemsCompleted(IAsyncResult iar) | 462 | private void MoveItemsCompleted(IAsyncResult iar) |
463 | { | 463 | { |
464 | MoveItemsDelegate d = (MoveItemsDelegate)iar.AsyncState; | ||
465 | d.EndInvoke(iar); | ||
464 | } | 466 | } |
465 | 467 | ||
466 | public bool MoveItems(string userID, List<InventoryItemBase> items, UUID sessionID) | 468 | public bool MoveItems(string userID, List<InventoryItemBase> items, UUID sessionID) |
diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index f04754b..b98e256 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs | |||
@@ -232,7 +232,7 @@ namespace OpenSim.Services.InventoryService | |||
232 | m_log.WarnFormat("[INVENTORY SERVICE]: User {0} inventory not available", userID); | 232 | m_log.WarnFormat("[INVENTORY SERVICE]: User {0} inventory not available", userID); |
233 | } | 233 | } |
234 | 234 | ||
235 | callback.BeginInvoke(folders, items, null, null); | 235 | Util.FireAndForget(delegate { callback(folders, items); }); |
236 | } | 236 | } |
237 | 237 | ||
238 | public InventoryCollection GetFolderContent(UUID userID, UUID folderID) | 238 | public InventoryCollection GetFolderContent(UUID userID, UUID folderID) |