aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs3
-rw-r--r--OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs17
-rw-r--r--OpenSim/Framework/Servers/VersionInfo.cs2
-rw-r--r--OpenSim/Framework/Util.cs9
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs41
-rw-r--r--OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs18
-rw-r--r--OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs18
-rw-r--r--OpenSim/Region/CoreModules/Framework/InterfaceCommander/Command.cs4
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs22
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs17
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs6
-rw-r--r--ThirdParty/SmartThreadPool/STPStartInfo.cs14
-rw-r--r--ThirdParty/SmartThreadPool/SmartThreadPool.cs8
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 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using OpenSim.Region.Framework.Interfaces; 30using OpenSim.Region.Framework.Interfaces;
31using OpenMetaverse;
31 32
32namespace OpenSim.Region.CoreModules.Framework.InterfaceCommander 33namespace 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;
47using OpenSim.Region.Framework.Scenes; 47using OpenSim.Region.Framework.Scenes;
48using OpenSim.Region.Framework.Interfaces; 48using OpenSim.Region.Framework.Interfaces;
49using OpenSim.Region.ScriptEngine.Shared; 49using OpenSim.Region.ScriptEngine.Shared;
50using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
51using OpenSim.Region.ScriptEngine.Shared.CodeTools; 50using OpenSim.Region.ScriptEngine.Shared.CodeTools;
52using OpenSim.Region.ScriptEngine.Shared.Instance; 51using OpenSim.Region.ScriptEngine.Shared.Instance;
53using OpenSim.Region.ScriptEngine.Shared.Api; 52using 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)