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).

0.6.3-post-fixes
diva 2009-02-13 00:49:58 +00:00
parent ebf268a593
commit a54758eef3
4 changed files with 17 additions and 8 deletions

View File

@ -204,16 +204,25 @@ namespace OpenSim.Region.CoreModules.Communications.Local
* Object-related communications * 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) foreach (Scene s in m_sceneList)
{ {
if (s.RegionInfo.RegionHandle == regionHandle) if (s.RegionInfo.RegionHandle == regionHandle)
{ {
//m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject"); //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject");
if (isLocalCall)
{
// We need to make a local copy of the object
ISceneObject sogClone = sog.CloneForNewScene(); ISceneObject sogClone = sog.CloneForNewScene();
return s.IncomingCreateObject(sogClone); return s.IncomingCreateObject(sogClone);
} }
else
{
// Use the object as it came through the wire
return s.IncomingCreateObject(sog);
}
}
} }
return false; return false;
} }

View File

@ -214,10 +214,10 @@ namespace OpenSim.Region.CoreModules.Communications.REST
* Object-related communications * Object-related communications
*/ */
public bool SendCreateObject(ulong regionHandle, ISceneObject sog) public bool SendCreateObject(ulong regionHandle, ISceneObject sog, bool isLocalCall)
{ {
// Try local first // Try local first
if (m_localBackend.SendCreateObject(regionHandle, sog)) if (m_localBackend.SendCreateObject(regionHandle, sog, true))
{ {
//m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded"); //m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded");
return true; return true;
@ -865,7 +865,7 @@ namespace OpenSim.Region.CoreModules.Communications.REST
} }
} }
// This is the meaning of POST object // 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["int_response_code"] = 200;
responsedata["str_response_string"] = result.ToString(); responsedata["str_response_string"] = result.ToString();

View File

@ -70,7 +70,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// <returns></returns> /// <returns></returns>
bool SendCloseAgent(ulong regionHandle, UUID id); bool SendCloseAgent(ulong regionHandle, UUID id);
bool SendCreateObject(ulong regionHandle, ISceneObject sog); bool SendCreateObject(ulong regionHandle, ISceneObject sog, bool isLocalCall);
} }

View File

@ -2028,7 +2028,7 @@ namespace OpenSim.Region.Framework.Scenes
// And the new channel... // And the new channel...
if (m_interregionCommsOut != null) if (m_interregionCommsOut != null)
successYN = m_interregionCommsOut.SendCreateObject(newRegionHandle, grp); successYN = m_interregionCommsOut.SendCreateObject(newRegionHandle, grp, true);
if (successYN) if (successYN)
{ {