diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b4972d60ba..0f84da970f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -710,7 +710,7 @@ namespace OpenSim.Region.Framework.Scenes
if (maptileRefresh != 0)
{
m_mapGenerationTimer.Interval = maptileRefresh * 1000;
- m_mapGenerationTimer.Elapsed += RegenerateMaptile;
+ m_mapGenerationTimer.Elapsed += RegenerateMaptileAndReregister;
m_mapGenerationTimer.AutoReset = true;
m_mapGenerationTimer.Start();
}
@@ -1647,21 +1647,17 @@ namespace OpenSim.Region.Framework.Scenes
{
m_sceneGridService.SetScene(this);
+ //// Unfortunately this needs to be here and it can't be async.
+ //// The map tile image is stored in RegionSettings, but it also needs to be
+ //// stored in the GridService, because that's what the world map module uses
+ //// to send the map image UUIDs (of other regions) to the viewer...
+ if (m_generateMaptiles)
+ RegenerateMaptile();
+
GridRegion region = new GridRegion(RegionInfo);
string error = GridService.RegisterRegion(RegionInfo.ScopeID, region);
if (error != String.Empty)
- {
throw new Exception(error);
- }
-
- // Generate the maptile asynchronously, because sometimes it can be very slow and we
- // don't want this to delay starting the region.
- if (m_generateMaptiles)
- {
- Util.FireAndForget(delegate {
- RegenerateMaptile(null, null);
- });
- }
}
#endregion
@@ -5032,13 +5028,24 @@ namespace OpenSim.Region.Framework.Scenes
///
///
///
- public void RegenerateMaptile(object sender, ElapsedEventArgs e)
+ private void RegenerateMaptile()
{
IWorldMapModule mapModule = RequestModuleInterface();
if (mapModule != null)
mapModule.GenerateMaptile();
}
+ private void RegenerateMaptileAndReregister(object sender, ElapsedEventArgs e)
+ {
+ RegenerateMaptile();
+
+ // We need to propagate the new image UUID to the grid service
+ // so that all simulators can retrieve it
+ string error = GridService.RegisterRegion(RegionInfo.ScopeID, new GridRegion(RegionInfo));
+ if (error != string.Empty)
+ throw new Exception(error);
+ }
+
// This method is called across the simulation connector to
// determine if a given agent is allowed in this region
// AS A ROOT AGENT. Returning false here will prevent them