From a54758eef38e911fcdca1cf200e97f56d6bf5e8f Mon Sep 17 00:00:00 2001 From: diva Date: Fri, 13 Feb 2009 00:49:58 +0000 Subject: Bug fix in prim crossing: making it clear when the local object needs to be cloned (regions on the same instance) and when it doesn't (regions on different instances). --- .../Communications/Local/LocalInterregionComms.cs | 15 ++++++++++++--- .../Communications/REST/RESTInterregionComms.cs | 6 +++--- 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'OpenSim/Region/CoreModules') diff --git a/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs b/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs index 48f737e..6e813f4 100644 --- a/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs +++ b/OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs @@ -204,15 +204,24 @@ namespace OpenSim.Region.CoreModules.Communications.Local * Object-related communications */ - public bool SendCreateObject(ulong regionHandle, ISceneObject sog) + public bool SendCreateObject(ulong regionHandle, ISceneObject sog, bool isLocalCall) { foreach (Scene s in m_sceneList) { if (s.RegionInfo.RegionHandle == regionHandle) { //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject"); - ISceneObject sogClone = sog.CloneForNewScene(); - return s.IncomingCreateObject(sogClone); + if (isLocalCall) + { + // We need to make a local copy of the object + ISceneObject sogClone = sog.CloneForNewScene(); + return s.IncomingCreateObject(sogClone); + } + else + { + // Use the object as it came through the wire + return s.IncomingCreateObject(sog); + } } } return false; diff --git a/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs b/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs index afc3441..f533553 100644 --- a/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs +++ b/OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs @@ -214,10 +214,10 @@ namespace OpenSim.Region.CoreModules.Communications.REST * Object-related communications */ - public bool SendCreateObject(ulong regionHandle, ISceneObject sog) + public bool SendCreateObject(ulong regionHandle, ISceneObject sog, bool isLocalCall) { // Try local first - if (m_localBackend.SendCreateObject(regionHandle, sog)) + if (m_localBackend.SendCreateObject(regionHandle, sog, true)) { //m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded"); return true; @@ -865,7 +865,7 @@ namespace OpenSim.Region.CoreModules.Communications.REST } } // This is the meaning of POST object - bool result = m_localBackend.SendCreateObject(regionhandle, sog); + bool result = m_localBackend.SendCreateObject(regionhandle, sog, false); responsedata["int_response_code"] = 200; responsedata["str_response_string"] = result.ToString(); -- cgit v1.1