diff options
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).
Diffstat (limited to 'OpenSim/Region/CoreModules/Communications')
-rw-r--r-- | OpenSim/Region/CoreModules/Communications/Local/LocalInterregionComms.cs | 15 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Communications/REST/RESTInterregionComms.cs | 6 |
2 files changed, 15 insertions, 6 deletions
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 | |||
204 | * Object-related communications | 204 | * Object-related communications |
205 | */ | 205 | */ |
206 | 206 | ||
207 | public bool SendCreateObject(ulong regionHandle, ISceneObject sog) | 207 | public bool SendCreateObject(ulong regionHandle, ISceneObject sog, bool isLocalCall) |
208 | { | 208 | { |
209 | foreach (Scene s in m_sceneList) | 209 | foreach (Scene s in m_sceneList) |
210 | { | 210 | { |
211 | if (s.RegionInfo.RegionHandle == regionHandle) | 211 | if (s.RegionInfo.RegionHandle == regionHandle) |
212 | { | 212 | { |
213 | //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject"); | 213 | //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject"); |
214 | ISceneObject sogClone = sog.CloneForNewScene(); | 214 | if (isLocalCall) |
215 | return s.IncomingCreateObject(sogClone); | 215 | { |
216 | // We need to make a local copy of the object | ||
217 | ISceneObject sogClone = sog.CloneForNewScene(); | ||
218 | return s.IncomingCreateObject(sogClone); | ||
219 | } | ||
220 | else | ||
221 | { | ||
222 | // Use the object as it came through the wire | ||
223 | return s.IncomingCreateObject(sog); | ||
224 | } | ||
216 | } | 225 | } |
217 | } | 226 | } |
218 | return false; | 227 | 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 | |||
214 | * Object-related communications | 214 | * Object-related communications |
215 | */ | 215 | */ |
216 | 216 | ||
217 | public bool SendCreateObject(ulong regionHandle, ISceneObject sog) | 217 | public bool SendCreateObject(ulong regionHandle, ISceneObject sog, bool isLocalCall) |
218 | { | 218 | { |
219 | // Try local first | 219 | // Try local first |
220 | if (m_localBackend.SendCreateObject(regionHandle, sog)) | 220 | if (m_localBackend.SendCreateObject(regionHandle, sog, true)) |
221 | { | 221 | { |
222 | //m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded"); | 222 | //m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded"); |
223 | return true; | 223 | return true; |
@@ -865,7 +865,7 @@ namespace OpenSim.Region.CoreModules.Communications.REST | |||
865 | } | 865 | } |
866 | } | 866 | } |
867 | // This is the meaning of POST object | 867 | // This is the meaning of POST object |
868 | bool result = m_localBackend.SendCreateObject(regionhandle, sog); | 868 | bool result = m_localBackend.SendCreateObject(regionhandle, sog, false); |
869 | 869 | ||
870 | responsedata["int_response_code"] = 200; | 870 | responsedata["int_response_code"] = 200; |
871 | responsedata["str_response_string"] = result.ToString(); | 871 | responsedata["str_response_string"] = result.ToString(); |