diff options
16 files changed, 145 insertions, 50 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 8a0340f..aa49343 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -1623,6 +1623,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1623 | 1623 | ||
1624 | // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events | 1624 | // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events |
1625 | m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000); | 1625 | m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000); |
1626 | m_PollServiceManager.Start(); | ||
1626 | HTTPDRunning = true; | 1627 | HTTPDRunning = true; |
1627 | 1628 | ||
1628 | //HttpListenerContext context; | 1629 | //HttpListenerContext context; |
@@ -1673,6 +1674,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1673 | HTTPDRunning = false; | 1674 | HTTPDRunning = false; |
1674 | try | 1675 | try |
1675 | { | 1676 | { |
1677 | m_PollServiceManager.Stop(); | ||
1678 | |||
1676 | m_httpListener2.ExceptionThrown -= httpServerException; | 1679 | m_httpListener2.ExceptionThrown -= httpServerException; |
1677 | //m_httpListener2.DisconnectHandler = null; | 1680 | //m_httpListener2.DisconnectHandler = null; |
1678 | 1681 | ||
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index 8d50151..3e84c55 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -45,19 +45,26 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
45 | private uint m_WorkerThreadCount = 0; | 45 | private uint m_WorkerThreadCount = 0; |
46 | private Thread[] m_workerThreads; | 46 | private Thread[] m_workerThreads; |
47 | private PollServiceWorkerThread[] m_PollServiceWorkerThreads; | 47 | private PollServiceWorkerThread[] m_PollServiceWorkerThreads; |
48 | private bool m_running = true; | 48 | private volatile bool m_running = true; |
49 | private int m_pollTimeout; | ||
49 | 50 | ||
50 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) | 51 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) |
51 | { | 52 | { |
52 | m_server = pSrv; | 53 | m_server = pSrv; |
53 | m_WorkerThreadCount = pWorkerThreadCount; | 54 | m_WorkerThreadCount = pWorkerThreadCount; |
55 | m_pollTimeout = pTimeout; | ||
56 | } | ||
57 | |||
58 | public void Start() | ||
59 | { | ||
60 | m_running = true; | ||
54 | m_workerThreads = new Thread[m_WorkerThreadCount]; | 61 | m_workerThreads = new Thread[m_WorkerThreadCount]; |
55 | m_PollServiceWorkerThreads = new PollServiceWorkerThread[m_WorkerThreadCount]; | 62 | m_PollServiceWorkerThreads = new PollServiceWorkerThread[m_WorkerThreadCount]; |
56 | 63 | ||
57 | //startup worker threads | 64 | //startup worker threads |
58 | for (uint i = 0; i < m_WorkerThreadCount; i++) | 65 | for (uint i = 0; i < m_WorkerThreadCount; i++) |
59 | { | 66 | { |
60 | m_PollServiceWorkerThreads[i] = new PollServiceWorkerThread(m_server, pTimeout); | 67 | m_PollServiceWorkerThreads[i] = new PollServiceWorkerThread(m_server, m_pollTimeout); |
61 | m_PollServiceWorkerThreads[i].ReQueue += ReQueueEvent; | 68 | m_PollServiceWorkerThreads[i].ReQueue += ReQueueEvent; |
62 | 69 | ||
63 | m_workerThreads[i] | 70 | m_workerThreads[i] |
@@ -136,8 +143,10 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
136 | 143 | ||
137 | } | 144 | } |
138 | 145 | ||
139 | ~PollServiceRequestManager() | 146 | public void Stop() |
140 | { | 147 | { |
148 | m_running = false; | ||
149 | |||
141 | foreach (object o in m_requests) | 150 | foreach (object o in m_requests) |
142 | { | 151 | { |
143 | PollServiceHttpRequest req = (PollServiceHttpRequest) o; | 152 | PollServiceHttpRequest req = (PollServiceHttpRequest) o; |
@@ -151,8 +160,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
151 | { | 160 | { |
152 | t.Abort(); | 161 | t.Abort(); |
153 | } | 162 | } |
154 | |||
155 | m_running = false; | ||
156 | } | 163 | } |
157 | } | 164 | } |
158 | } \ No newline at end of file | 165 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs index 49fcf93..facda59 100644 --- a/OpenSim/Framework/Servers/VersionInfo.cs +++ b/OpenSim/Framework/Servers/VersionInfo.cs | |||
@@ -30,7 +30,7 @@ namespace OpenSim | |||
30 | public class VersionInfo | 30 | public class VersionInfo |
31 | { | 31 | { |
32 | private const string VERSION_NUMBER = "0.7.5"; | 32 | private const string VERSION_NUMBER = "0.7.5"; |
33 | private const Flavour VERSION_FLAVOUR = Flavour.RC2; | 33 | private const Flavour VERSION_FLAVOUR = Flavour.Release; |
34 | 34 | ||
35 | public enum Flavour | 35 | public enum Flavour |
36 | { | 36 | { |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 7204279..0bd2977 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -1658,8 +1658,13 @@ namespace OpenSim.Framework | |||
1658 | if (m_ThreadPool != null) | 1658 | if (m_ThreadPool != null) |
1659 | throw new InvalidOperationException("SmartThreadPool is already initialized"); | 1659 | throw new InvalidOperationException("SmartThreadPool is already initialized"); |
1660 | 1660 | ||
1661 | m_ThreadPool = new SmartThreadPool(2000, maxThreads, 2); | 1661 | STPStartInfo startInfo = new STPStartInfo(); |
1662 | m_ThreadPool.Name = "Util"; | 1662 | startInfo.ThreadPoolName = "Util"; |
1663 | startInfo.IdleTimeout = 2000; | ||
1664 | startInfo.MaxWorkerThreads = maxThreads; | ||
1665 | startInfo.MinWorkerThreads = 2; | ||
1666 | |||
1667 | m_ThreadPool = new SmartThreadPool(startInfo); | ||
1663 | } | 1668 | } |
1664 | 1669 | ||
1665 | public static int FireAndForgetCount() | 1670 | public static int FireAndForgetCount() |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index a534522..568e216 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | |||
@@ -617,7 +617,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
617 | = new SceneObjectPart(owner_id, pbs, position, Quaternion.Identity, Vector3.Zero); | 617 | = new SceneObjectPart(owner_id, pbs, position, Quaternion.Identity, Vector3.Zero); |
618 | 618 | ||
619 | prim.Scale = scale; | 619 | prim.Scale = scale; |
620 | prim.OffsetPosition = position; | 620 | //prim.OffsetPosition = position; |
621 | rotations.Add(rotation); | 621 | rotations.Add(rotation); |
622 | positions.Add(position); | 622 | positions.Add(position); |
623 | prim.UUID = UUID.Random(); | 623 | prim.UUID = UUID.Random(); |
@@ -641,25 +641,40 @@ namespace OpenSim.Region.ClientStack.Linden | |||
641 | grp.AddPart(prim); | 641 | grp.AddPart(prim); |
642 | } | 642 | } |
643 | 643 | ||
644 | // Fix first link number | 644 | Vector3 rootPos = positions[0]; |
645 | |||
645 | if (grp.Parts.Length > 1) | 646 | if (grp.Parts.Length > 1) |
647 | { | ||
648 | // Fix first link number | ||
646 | grp.RootPart.LinkNum++; | 649 | grp.RootPart.LinkNum++; |
647 | 650 | ||
648 | Vector3 rootPos = positions[0]; | 651 | Quaternion rootRotConj = Quaternion.Conjugate(rotations[0]); |
649 | grp.AbsolutePosition = rootPos; | 652 | Quaternion tmprot; |
650 | for (int i = 0; i < positions.Count; i++) | 653 | Vector3 offset; |
651 | { | 654 | |
652 | Vector3 offset = positions[i] - rootPos; | 655 | // fix children rotations and positions |
653 | grp.Parts[i].OffsetPosition = offset; | 656 | for (int i = 1; i < rotations.Count; i++) |
654 | } | 657 | { |
658 | tmprot = rotations[i]; | ||
659 | tmprot = rootRotConj * tmprot; | ||
660 | |||
661 | grp.Parts[i].RotationOffset = tmprot; | ||
655 | 662 | ||
656 | for (int i = 0; i < rotations.Count; i++) | 663 | offset = positions[i] - rootPos; |
664 | |||
665 | offset *= rootRotConj; | ||
666 | grp.Parts[i].OffsetPosition = offset; | ||
667 | } | ||
668 | |||
669 | grp.AbsolutePosition = rootPos; | ||
670 | grp.UpdateGroupRotationR(rotations[0]); | ||
671 | } | ||
672 | else | ||
657 | { | 673 | { |
658 | if (i != 0) | 674 | grp.AbsolutePosition = rootPos; |
659 | grp.Parts[i].RotationOffset = rotations[i]; | 675 | grp.UpdateGroupRotationR(rotations[0]); |
660 | } | 676 | } |
661 | 677 | ||
662 | grp.UpdateGroupRotationR(rotations[0]); | ||
663 | data = ASCIIEncoding.ASCII.GetBytes(SceneObjectSerializer.ToOriginalXmlFormat(grp)); | 678 | data = ASCIIEncoding.ASCII.GetBytes(SceneObjectSerializer.ToOriginalXmlFormat(grp)); |
664 | } | 679 | } |
665 | 680 | ||
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs index e973652..d1ad74f 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs | |||
@@ -214,9 +214,9 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
214 | public void HandleTaskItemUpdateFromTransaction( | 214 | public void HandleTaskItemUpdateFromTransaction( |
215 | IClientAPI remoteClient, SceneObjectPart part, UUID transactionID, TaskInventoryItem item) | 215 | IClientAPI remoteClient, SceneObjectPart part, UUID transactionID, TaskInventoryItem item) |
216 | { | 216 | { |
217 | m_log.DebugFormat( | 217 | // m_log.DebugFormat( |
218 | "[ASSET TRANSACTION MODULE] Called HandleTaskItemUpdateFromTransaction with item {0} in {1} for {2} in {3}", | 218 | // "[ASSET TRANSACTION MODULE]: Called HandleTaskItemUpdateFromTransaction with item {0} in {1} for {2} in {3}", |
219 | item.Name, part.Name, remoteClient.Name, m_Scene.RegionInfo.RegionName); | 219 | // item.Name, part.Name, remoteClient.Name, m_Scene.RegionInfo.RegionName); |
220 | 220 | ||
221 | AgentAssetTransactions transactions = | 221 | AgentAssetTransactions transactions = |
222 | GetUserTransactions(remoteClient.AgentId); | 222 | GetUserTransactions(remoteClient.AgentId); |
@@ -230,15 +230,17 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
230 | /// </summary> | 230 | /// </summary> |
231 | /// <param name="remoteClient"></param> | 231 | /// <param name="remoteClient"></param> |
232 | /// <param name="assetID"></param> | 232 | /// <param name="assetID"></param> |
233 | /// <param name="transaction"></param> | 233 | /// <param name="transactionID"></param> |
234 | /// <param name="type"></param> | 234 | /// <param name="type"></param> |
235 | /// <param name="data"></param></param> | 235 | /// <param name="data"></param></param> |
236 | /// <param name="tempFile"></param> | 236 | /// <param name="tempFile"></param> |
237 | public void HandleUDPUploadRequest(IClientAPI remoteClient, | 237 | public void HandleUDPUploadRequest(IClientAPI remoteClient, |
238 | UUID assetID, UUID transaction, sbyte type, byte[] data, | 238 | UUID assetID, UUID transactionID, sbyte type, byte[] data, |
239 | bool storeLocal, bool tempFile) | 239 | bool storeLocal, bool tempFile) |
240 | { | 240 | { |
241 | // m_log.Debug("HandleUDPUploadRequest - assetID: " + assetID.ToString() + " transaction: " + transaction.ToString() + " type: " + type.ToString() + " storelocal: " + storeLocal + " tempFile: " + tempFile); | 241 | // m_log.DebugFormat( |
242 | // "[ASSET TRANSACTION MODULE]: HandleUDPUploadRequest - assetID: {0}, transaction {1}, type {2}, storeLocal {3}, tempFile {4}, data.Length {5}", | ||
243 | // assetID, transactionID, type, storeLocal, tempFile, data.Length); | ||
242 | 244 | ||
243 | if (((AssetType)type == AssetType.Texture || | 245 | if (((AssetType)type == AssetType.Texture || |
244 | (AssetType)type == AssetType.Sound || | 246 | (AssetType)type == AssetType.Sound || |
@@ -274,8 +276,8 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
274 | } | 276 | } |
275 | 277 | ||
276 | AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); | 278 | AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); |
277 | AssetXferUploader uploader = transactions.RequestXferUploader(transaction); | 279 | AssetXferUploader uploader = transactions.RequestXferUploader(transactionID); |
278 | uploader.StartUpload(remoteClient, assetID, transaction, type, data, storeLocal, tempFile); | 280 | uploader.StartUpload(remoteClient, assetID, transactionID, type, data, storeLocal, tempFile); |
279 | } | 281 | } |
280 | 282 | ||
281 | /// <summary> | 283 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs index 8add4bb..11efe6d 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs | |||
@@ -321,7 +321,8 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
321 | // to avoid a race condition when the appearance module retrieves the item to set the asset id in | 321 | // to avoid a race condition when the appearance module retrieves the item to set the asset id in |
322 | // the AvatarAppearance structure. | 322 | // the AvatarAppearance structure. |
323 | item.AssetID = m_asset.FullID; | 323 | item.AssetID = m_asset.FullID; |
324 | m_Scene.InventoryService.UpdateItem(item); | 324 | if (item.AssetID != UUID.Zero) |
325 | m_Scene.InventoryService.UpdateItem(item); | ||
325 | 326 | ||
326 | if (m_uploadState == UploadState.Complete) | 327 | if (m_uploadState == UploadState.Complete) |
327 | { | 328 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 5069803..ecbd07f 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -487,6 +487,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
487 | { | 487 | { |
488 | // m_log.DebugFormat( | 488 | // m_log.DebugFormat( |
489 | // "[INVENTORY ARCHIVER]: Loaded coalescence {0} has {1} objects", assetId, coa.Count); | 489 | // "[INVENTORY ARCHIVER]: Loaded coalescence {0} has {1} objects", assetId, coa.Count); |
490 | |||
491 | if (coa.Objects.Count == 0) | ||
492 | { | ||
493 | m_log.WarnFormat( | ||
494 | "[INVENTORY ARCHIVE READ REQUEST]: Aborting load of coalesced object from asset {0} as it has zero loaded components", | ||
495 | assetId); | ||
496 | return false; | ||
497 | } | ||
490 | 498 | ||
491 | sceneObjects.AddRange(coa.Objects); | 499 | sceneObjects.AddRange(coa.Objects); |
492 | } | 500 | } |
@@ -495,7 +503,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
495 | SceneObjectGroup deserializedObject = SceneObjectSerializer.FromOriginalXmlFormat(xmlData); | 503 | SceneObjectGroup deserializedObject = SceneObjectSerializer.FromOriginalXmlFormat(xmlData); |
496 | 504 | ||
497 | if (deserializedObject != null) | 505 | if (deserializedObject != null) |
506 | { | ||
498 | sceneObjects.Add(deserializedObject); | 507 | sceneObjects.Add(deserializedObject); |
508 | } | ||
509 | else | ||
510 | { | ||
511 | m_log.WarnFormat( | ||
512 | "[INVENTORY ARCHIVE READ REQUEST]: Aborting load of object from asset {0} as deserialization failed", | ||
513 | assetId); | ||
514 | |||
515 | return false; | ||
516 | } | ||
499 | } | 517 | } |
500 | 518 | ||
501 | foreach (SceneObjectGroup sog in sceneObjects) | 519 | foreach (SceneObjectGroup sog in sceneObjects) |
diff --git a/OpenSim/Region/CoreModules/Framework/InterfaceCommander/Command.cs b/OpenSim/Region/CoreModules/Framework/InterfaceCommander/Command.cs index 4004135..b9786ae 100644 --- a/OpenSim/Region/CoreModules/Framework/InterfaceCommander/Command.cs +++ b/OpenSim/Region/CoreModules/Framework/InterfaceCommander/Command.cs | |||
@@ -28,6 +28,7 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using OpenSim.Region.Framework.Interfaces; | 30 | using OpenSim.Region.Framework.Interfaces; |
31 | using OpenMetaverse; | ||
31 | 32 | ||
32 | namespace OpenSim.Region.CoreModules.Framework.InterfaceCommander | 33 | namespace OpenSim.Region.CoreModules.Framework.InterfaceCommander |
33 | { | 34 | { |
@@ -152,6 +153,9 @@ namespace OpenSim.Region.CoreModules.Framework.InterfaceCommander | |||
152 | case "Boolean": | 153 | case "Boolean": |
153 | m_args[i].ArgumentValue = Boolean.Parse(arg.ToString()); | 154 | m_args[i].ArgumentValue = Boolean.Parse(arg.ToString()); |
154 | break; | 155 | break; |
156 | case "UUID": | ||
157 | m_args[i].ArgumentValue = UUID.Parse(arg.ToString()); | ||
158 | break; | ||
155 | default: | 159 | default: |
156 | Console.WriteLine("ERROR: Unknown desired type for argument " + m_args[i].Name + " on command " + m_name); | 160 | Console.WriteLine("ERROR: Unknown desired type for argument " + m_args[i].Name + " on command " + m_name); |
157 | break; | 161 | break; |
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs index 3b84d57..4d49794 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs | |||
@@ -117,7 +117,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
117 | 117 | ||
118 | m_module.Scene.RegionInfo.RegionSettings.Save(); | 118 | m_module.Scene.RegionInfo.RegionSettings.Save(); |
119 | m_module.TriggerRegionInfoChange(); | 119 | m_module.TriggerRegionInfoChange(); |
120 | m_module.sendRegionInfoPacketToAll(); | 120 | m_module.sendRegionHandshakeToAll(); |
121 | } | 121 | } |
122 | } | 122 | } |
123 | } | 123 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 5c8b097..a6db4de 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -407,16 +407,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
407 | if (item.Owner != remoteClient.AgentId) | 407 | if (item.Owner != remoteClient.AgentId) |
408 | return; | 408 | return; |
409 | 409 | ||
410 | if (UUID.Zero == transactionID) | 410 | item.Name = itemUpd.Name; |
411 | { | 411 | item.Description = itemUpd.Description; |
412 | item.Name = itemUpd.Name; | ||
413 | item.Description = itemUpd.Description; | ||
414 | 412 | ||
415 | // m_log.DebugFormat( | 413 | // m_log.DebugFormat( |
416 | // "[USER INVENTORY]: itemUpd {0} {1} {2} {3}, item {4} {5} {6} {7}", | 414 | // "[USER INVENTORY]: itemUpd {0} {1} {2} {3}, item {4} {5} {6} {7}", |
417 | // itemUpd.NextPermissions, itemUpd.GroupPermissions, itemUpd.EveryOnePermissions, item.Flags, | 415 | // itemUpd.NextPermissions, itemUpd.GroupPermissions, itemUpd.EveryOnePermissions, item.Flags, |
418 | // item.NextPermissions, item.GroupPermissions, item.EveryOnePermissions, item.CurrentPermissions); | 416 | // item.NextPermissions, item.GroupPermissions, item.EveryOnePermissions, item.CurrentPermissions); |
419 | 417 | ||
418 | if (itemUpd.NextPermissions != 0) // Use this to determine validity. Can never be 0 if valid | ||
419 | { | ||
420 | if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions)) | 420 | if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions)) |
421 | item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner; | 421 | item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner; |
422 | item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions; | 422 | item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions; |
@@ -451,7 +451,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
451 | 451 | ||
452 | InventoryService.UpdateItem(item); | 452 | InventoryService.UpdateItem(item); |
453 | } | 453 | } |
454 | else | 454 | |
455 | if (UUID.Zero != transactionID) | ||
455 | { | 456 | { |
456 | if (AgentTransactionsModule != null) | 457 | if (AgentTransactionsModule != null) |
457 | { | 458 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs index a4f730d..5cb271d 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs | |||
@@ -42,9 +42,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
42 | /// <summary> | 42 | /// <summary> |
43 | /// Serialize and deserialize coalesced scene objects. | 43 | /// Serialize and deserialize coalesced scene objects. |
44 | /// </summary> | 44 | /// </summary> |
45 | /// <remarks> | ||
46 | /// Deserialization not yet here. | ||
47 | /// </remarks> | ||
48 | public class CoalescedSceneObjectsSerializer | 45 | public class CoalescedSceneObjectsSerializer |
49 | { | 46 | { |
50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
@@ -128,6 +125,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
128 | // m_log.DebugFormat("[COALESCED SCENE OBJECTS SERIALIZER]: TryFromXml() deserializing {0}", xml); | 125 | // m_log.DebugFormat("[COALESCED SCENE OBJECTS SERIALIZER]: TryFromXml() deserializing {0}", xml); |
129 | 126 | ||
130 | coa = null; | 127 | coa = null; |
128 | int i = 0; | ||
131 | 129 | ||
132 | using (StringReader sr = new StringReader(xml)) | 130 | using (StringReader sr = new StringReader(xml)) |
133 | { | 131 | { |
@@ -153,7 +151,23 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
153 | if (reader.Name == "SceneObjectGroup") | 151 | if (reader.Name == "SceneObjectGroup") |
154 | { | 152 | { |
155 | string soXml = reader.ReadOuterXml(); | 153 | string soXml = reader.ReadOuterXml(); |
156 | coa.Add(SceneObjectSerializer.FromOriginalXmlFormat(soXml)); | 154 | |
155 | SceneObjectGroup so = SceneObjectSerializer.FromOriginalXmlFormat(soXml); | ||
156 | |||
157 | if (so != null) | ||
158 | { | ||
159 | coa.Add(so); | ||
160 | } | ||
161 | else | ||
162 | { | ||
163 | // XXX: Possibly we should fail outright here rather than continuing if a particular component of the | ||
164 | // coalesced object fails to load. | ||
165 | m_log.WarnFormat( | ||
166 | "[COALESCED SCENE OBJECTS SERIALIZER]: Deserialization of xml for component {0} failed. Continuing.", | ||
167 | i); | ||
168 | } | ||
169 | |||
170 | i++; | ||
157 | } | 171 | } |
158 | } | 172 | } |
159 | 173 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 2493a15..1ab107a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -1668,10 +1668,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1668 | part.Shape.FlexiForceX = (float)Force.x; | 1668 | part.Shape.FlexiForceX = (float)Force.x; |
1669 | part.Shape.FlexiForceY = (float)Force.y; | 1669 | part.Shape.FlexiForceY = (float)Force.y; |
1670 | part.Shape.FlexiForceZ = (float)Force.z; | 1670 | part.Shape.FlexiForceZ = (float)Force.z; |
1671 | part.Shape.PathCurve = 0x80; | 1671 | part.Shape.PathCurve = (byte)Extrusion.Flexible; |
1672 | part.ParentGroup.HasGroupChanged = true; | 1672 | } |
1673 | part.ScheduleFullUpdate(); | 1673 | else |
1674 | { | ||
1675 | // Other values not set, they do not seem to be sent to the viewer | ||
1676 | // Setting PathCurve appears to be what actually toggles the check box and turns Flexi on and off | ||
1677 | part.Shape.PathCurve = (byte)Extrusion.Straight; | ||
1678 | part.Shape.FlexiEntry = false; | ||
1674 | } | 1679 | } |
1680 | part.ParentGroup.HasGroupChanged = true; | ||
1681 | part.ScheduleFullUpdate(); | ||
1675 | } | 1682 | } |
1676 | 1683 | ||
1677 | /// <summary> | 1684 | /// <summary> |
@@ -5770,13 +5777,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5770 | if (parcelOwned && land.LandData.OwnerID == id || | 5777 | if (parcelOwned && land.LandData.OwnerID == id || |
5771 | parcel && land.LandData.GlobalID == id) | 5778 | parcel && land.LandData.GlobalID == id) |
5772 | { | 5779 | { |
5773 | result.Add(ssp.UUID.ToString()); | 5780 | result.Add(new LSL_Key(ssp.UUID.ToString())); |
5774 | } | 5781 | } |
5775 | } | 5782 | } |
5776 | } | 5783 | } |
5777 | else | 5784 | else |
5778 | { | 5785 | { |
5779 | result.Add(ssp.UUID.ToString()); | 5786 | result.Add(new LSL_Key(ssp.UUID.ToString())); |
5780 | } | 5787 | } |
5781 | } | 5788 | } |
5782 | // Maximum of 100 results | 5789 | // Maximum of 100 results |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 8c3bb5b..18569ca 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -47,7 +47,6 @@ using OpenSim.Framework.Console; | |||
47 | using OpenSim.Region.Framework.Scenes; | 47 | using OpenSim.Region.Framework.Scenes; |
48 | using OpenSim.Region.Framework.Interfaces; | 48 | using OpenSim.Region.Framework.Interfaces; |
49 | using OpenSim.Region.ScriptEngine.Shared; | 49 | using OpenSim.Region.ScriptEngine.Shared; |
50 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
51 | using OpenSim.Region.ScriptEngine.Shared.CodeTools; | 50 | using OpenSim.Region.ScriptEngine.Shared.CodeTools; |
52 | using OpenSim.Region.ScriptEngine.Shared.Instance; | 51 | using OpenSim.Region.ScriptEngine.Shared.Instance; |
53 | using OpenSim.Region.ScriptEngine.Shared.Api; | 52 | using OpenSim.Region.ScriptEngine.Shared.Api; |
@@ -606,7 +605,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
606 | } | 605 | } |
607 | 606 | ||
608 | StringBuilder sb = new StringBuilder(); | 607 | StringBuilder sb = new StringBuilder(); |
609 | Queue eq = instance.EventQueue; | ||
610 | 608 | ||
611 | sb.AppendFormat("Script name : {0}\n", instance.ScriptName); | 609 | sb.AppendFormat("Script name : {0}\n", instance.ScriptName); |
612 | sb.AppendFormat("Status : {0}\n", status); | 610 | sb.AppendFormat("Status : {0}\n", status); |
@@ -1486,7 +1484,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1486 | m_MaxScriptQueue = maxScriptQueue; | 1484 | m_MaxScriptQueue = maxScriptQueue; |
1487 | 1485 | ||
1488 | STPStartInfo startInfo = new STPStartInfo(); | 1486 | STPStartInfo startInfo = new STPStartInfo(); |
1489 | startInfo.IdleTimeout = idleTimeout*1000; // convert to seconds as stated in .ini | 1487 | startInfo.ThreadPoolName = "XEngine"; |
1488 | startInfo.IdleTimeout = idleTimeout * 1000; // convert to seconds as stated in .ini | ||
1490 | startInfo.MaxWorkerThreads = maxThreads; | 1489 | startInfo.MaxWorkerThreads = maxThreads; |
1491 | startInfo.MinWorkerThreads = minThreads; | 1490 | startInfo.MinWorkerThreads = minThreads; |
1492 | startInfo.ThreadPriority = threadPriority;; | 1491 | startInfo.ThreadPriority = threadPriority;; |
@@ -1494,7 +1493,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1494 | startInfo.StartSuspended = true; | 1493 | startInfo.StartSuspended = true; |
1495 | 1494 | ||
1496 | m_ThreadPool = new SmartThreadPool(startInfo); | 1495 | m_ThreadPool = new SmartThreadPool(startInfo); |
1497 | m_ThreadPool.Name = "XEngine"; | ||
1498 | } | 1496 | } |
1499 | 1497 | ||
1500 | // | 1498 | // |
diff --git a/ThirdParty/SmartThreadPool/STPStartInfo.cs b/ThirdParty/SmartThreadPool/STPStartInfo.cs index d181563..fa9ceb4 100644 --- a/ThirdParty/SmartThreadPool/STPStartInfo.cs +++ b/ThirdParty/SmartThreadPool/STPStartInfo.cs | |||
@@ -33,6 +33,11 @@ namespace Amib.Threading | |||
33 | private ThreadPriority _threadPriority; | 33 | private ThreadPriority _threadPriority; |
34 | 34 | ||
35 | /// <summary> | 35 | /// <summary> |
36 | /// The thread pool name. Threads will get names depending on this. | ||
37 | /// </summary> | ||
38 | private string _threadPoolName; | ||
39 | |||
40 | /// <summary> | ||
36 | /// If this field is not null then the performance counters are enabled | 41 | /// If this field is not null then the performance counters are enabled |
37 | /// and use the string as the name of the instance. | 42 | /// and use the string as the name of the instance. |
38 | /// </summary> | 43 | /// </summary> |
@@ -46,6 +51,7 @@ namespace Amib.Threading | |||
46 | _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads; | 51 | _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads; |
47 | _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads; | 52 | _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads; |
48 | _threadPriority = SmartThreadPool.DefaultThreadPriority; | 53 | _threadPriority = SmartThreadPool.DefaultThreadPriority; |
54 | _threadPoolName = SmartThreadPool.DefaultThreadPoolName; | ||
49 | _pcInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName; | 55 | _pcInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName; |
50 | _stackSize = SmartThreadPool.DefaultStackSize; | 56 | _stackSize = SmartThreadPool.DefaultStackSize; |
51 | } | 57 | } |
@@ -56,6 +62,7 @@ namespace Amib.Threading | |||
56 | _minWorkerThreads = stpStartInfo._minWorkerThreads; | 62 | _minWorkerThreads = stpStartInfo._minWorkerThreads; |
57 | _maxWorkerThreads = stpStartInfo._maxWorkerThreads; | 63 | _maxWorkerThreads = stpStartInfo._maxWorkerThreads; |
58 | _threadPriority = stpStartInfo._threadPriority; | 64 | _threadPriority = stpStartInfo._threadPriority; |
65 | _threadPoolName = stpStartInfo._threadPoolName; | ||
59 | _pcInstanceName = stpStartInfo._pcInstanceName; | 66 | _pcInstanceName = stpStartInfo._pcInstanceName; |
60 | _stackSize = stpStartInfo._stackSize; | 67 | _stackSize = stpStartInfo._stackSize; |
61 | } | 68 | } |
@@ -84,6 +91,13 @@ namespace Amib.Threading | |||
84 | set { _threadPriority = value; } | 91 | set { _threadPriority = value; } |
85 | } | 92 | } |
86 | 93 | ||
94 | public virtual string ThreadPoolName | ||
95 | { | ||
96 | get { return _threadPoolName; } | ||
97 | set { _threadPoolName = value; } | ||
98 | } | ||
99 | |||
100 | |||
87 | public string PerformanceCounterInstanceName | 101 | public string PerformanceCounterInstanceName |
88 | { | 102 | { |
89 | get { return _pcInstanceName; } | 103 | get { return _pcInstanceName; } |
diff --git a/ThirdParty/SmartThreadPool/SmartThreadPool.cs b/ThirdParty/SmartThreadPool/SmartThreadPool.cs index bd52f62..19a0007 100644 --- a/ThirdParty/SmartThreadPool/SmartThreadPool.cs +++ b/ThirdParty/SmartThreadPool/SmartThreadPool.cs | |||
@@ -135,6 +135,11 @@ namespace Amib.Threading | |||
135 | /// </summary> | 135 | /// </summary> |
136 | public const ThreadPriority DefaultThreadPriority = ThreadPriority.Normal; | 136 | public const ThreadPriority DefaultThreadPriority = ThreadPriority.Normal; |
137 | 137 | ||
138 | /// <summary> | ||
139 | /// The default thread pool name | ||
140 | /// </summary> | ||
141 | public const string DefaultThreadPoolName = "SmartThreadPool"; | ||
142 | |||
138 | #endregion | 143 | #endregion |
139 | 144 | ||
140 | #region Member Variables | 145 | #region Member Variables |
@@ -143,7 +148,7 @@ namespace Amib.Threading | |||
143 | /// Contains the name of this instance of SmartThreadPool. | 148 | /// Contains the name of this instance of SmartThreadPool. |
144 | /// Can be changed by the user. | 149 | /// Can be changed by the user. |
145 | /// </summary> | 150 | /// </summary> |
146 | private string _name = "SmartThreadPool"; | 151 | private string _name = DefaultThreadPoolName; |
147 | 152 | ||
148 | /// <summary> | 153 | /// <summary> |
149 | /// Hashtable of all the threads in the thread pool. | 154 | /// Hashtable of all the threads in the thread pool. |
@@ -307,6 +312,7 @@ namespace Amib.Threading | |||
307 | 312 | ||
308 | private void Initialize() | 313 | private void Initialize() |
309 | { | 314 | { |
315 | Name = _stpStartInfo.ThreadPoolName; | ||
310 | ValidateSTPStartInfo(); | 316 | ValidateSTPStartInfo(); |
311 | 317 | ||
312 | if (null != _stpStartInfo.PerformanceCounterInstanceName) | 318 | if (null != _stpStartInfo.PerformanceCounterInstanceName) |