diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 9d8561b69e..0fbf90aac4 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -662,11 +662,11 @@ namespace OpenSim.Framework.Servers.HttpServer
}
catch (IOException e)
{
- m_log.ErrorFormat("[BASE HTTP SERVER]: HandleRequest() threw {0}", e);
+ m_log.ErrorFormat("[BASE HTTP SERVER]: HandleRequest() threw {0}{1}", e.Message, e.StackTrace);
}
catch (Exception e)
{
- m_log.ErrorFormat("[BASE HTTP SERVER]: HandleRequest() threw {0}", e.StackTrace);
+ m_log.ErrorFormat("[BASE HTTP SERVER]: HandleRequest() threw {0}{1}", e.Message, e.StackTrace);
SendHTML500(response);
}
finally
diff --git a/OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs b/OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs
index d295384279..2d4cffd224 100644
--- a/OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs
@@ -151,11 +151,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure
Scene scene = (Scene)(client.Scene);
ScenePresence presence = scene.GetScenePresence(client.AgentId);
+ // Round up Z co-ordinate rather than round-down by casting. This stops tall avatars from being given
+ // a teleport Z co-ordinate by short avatars that drops them through or embeds them in thin floors on
+ // arrival.
+ //
+ // Ideally we would give the exact float position adjusting for the relative height of the two avatars
+ // but it looks like a float component isn't possible with a parcel ID.
UUID dest = Util.BuildFakeParcelID(
scene.RegionInfo.RegionHandle,
(uint)presence.AbsolutePosition.X,
(uint)presence.AbsolutePosition.Y,
- (uint)presence.AbsolutePosition.Z);
+ (uint)Math.Ceiling(presence.AbsolutePosition.Z));
m_log.DebugFormat("TP invite with message {0}", message);
diff --git a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
index da81dc16a9..039c3fa4f8 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
@@ -59,28 +59,32 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
/// A terrain channel generated from the image.
public virtual ITerrainChannel LoadFile(string filename)
{
- return LoadBitmap(new Bitmap(filename));
+ using (Bitmap b = new Bitmap(filename))
+ return LoadBitmap(b);
}
public virtual ITerrainChannel LoadFile(string filename, int offsetX, int offsetY, int fileWidth, int fileHeight, int w, int h)
{
- Bitmap bitmap = new Bitmap(filename);
- ITerrainChannel retval = new TerrainChannel(true);
-
- for (int x = 0; x < retval.Width; x++)
+ using (Bitmap bitmap = new Bitmap(filename))
{
- for (int y = 0; y < retval.Height; y++)
- {
- retval[x, y] = bitmap.GetPixel(offsetX * retval.Width + x, (bitmap.Height - (retval.Height * (offsetY + 1))) + retval.Height - y - 1).GetBrightness() * 128;
- }
- }
+ ITerrainChannel retval = new TerrainChannel(true);
- return retval;
+ for (int x = 0; x < retval.Width; x++)
+ {
+ for (int y = 0; y < retval.Height; y++)
+ {
+ retval[x, y] = bitmap.GetPixel(offsetX * retval.Width + x, (bitmap.Height - (retval.Height * (offsetY + 1))) + retval.Height - y - 1).GetBrightness() * 128;
+ }
+ }
+
+ return retval;
+ }
}
public virtual ITerrainChannel LoadStream(Stream stream)
{
- return LoadBitmap(new Bitmap(stream));
+ using (Bitmap b = new Bitmap(stream))
+ return LoadBitmap(b);
}
protected virtual ITerrainChannel LoadBitmap(Bitmap bitmap)
@@ -134,35 +138,50 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
// "Saving the image to the same file it was constructed from is not allowed and throws an exception."
string tempName = Path.GetTempFileName();
- Bitmap entireBitmap = null;
- Bitmap thisBitmap = null;
- if (File.Exists(filename))
+ Bitmap existingBitmap = null;
+ Bitmap thisBitmap;
+ Bitmap newBitmap;
+
+ try
{
- File.Copy(filename, tempName, true);
- entireBitmap = new Bitmap(tempName);
- if (entireBitmap.Width != fileWidth * regionSizeX || entireBitmap.Height != fileHeight * regionSizeY)
+ if (File.Exists(filename))
{
- // old file, let's overwrite it
- entireBitmap = new Bitmap(fileWidth * regionSizeX, fileHeight * regionSizeY);
+ File.Copy(filename, tempName, true);
+ existingBitmap = new Bitmap(tempName);
+ if (existingBitmap.Width != fileWidth * regionSizeX || existingBitmap.Height != fileHeight * regionSizeY)
+ {
+ // old file, let's overwrite it
+ newBitmap = new Bitmap(fileWidth * regionSizeX, fileHeight * regionSizeY);
+ }
+ else
+ {
+ newBitmap = existingBitmap;
+ }
}
+ else
+ {
+ newBitmap = new Bitmap(fileWidth * regionSizeX, fileHeight * regionSizeY);
+ }
+
+ thisBitmap = CreateGrayscaleBitmapFromMap(m_channel);
+ // Console.WriteLine("offsetX=" + offsetX + " offsetY=" + offsetY);
+ for (int x = 0; x < regionSizeX; x++)
+ for (int y = 0; y < regionSizeY; y++)
+ newBitmap.SetPixel(x + offsetX * regionSizeX, y + (fileHeight - 1 - offsetY) * regionSizeY, thisBitmap.GetPixel(x, y));
+
+ Save(newBitmap, filename);
}
- else
+ finally
{
- entireBitmap = new Bitmap(fileWidth * regionSizeX, fileHeight * regionSizeY);
+ if (existingBitmap != null)
+ existingBitmap.Dispose();
+
+ thisBitmap.Dispose();
+ newBitmap.Dispose();
+
+ if (File.Exists(tempName))
+ File.Delete(tempName);
}
-
- thisBitmap = CreateGrayscaleBitmapFromMap(m_channel);
-// Console.WriteLine("offsetX=" + offsetX + " offsetY=" + offsetY);
- for (int x = 0; x < regionSizeX; x++)
- for (int y = 0; y < regionSizeY; y++)
- entireBitmap.SetPixel(x + offsetX * regionSizeX, y + (fileHeight - 1 - offsetY) * regionSizeY, thisBitmap.GetPixel(x, y));
-
- Save(entireBitmap, filename);
- thisBitmap.Dispose();
- entireBitmap.Dispose();
-
- if (File.Exists(tempName))
- File.Delete(tempName);
}
protected virtual void Save(Bitmap bmp, string filename)
@@ -226,16 +245,21 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
/// A System.Drawing.Bitmap containing a coloured image
protected static Bitmap CreateBitmapFromMap(ITerrainChannel map)
{
- Bitmap gradientmapLd = new Bitmap("defaultstripe.png");
+ int pallete;
+ Bitmap bmp;
+ Color[] colours;
- int pallete = gradientmapLd.Height;
-
- Bitmap bmp = new Bitmap(map.Width, map.Height);
- Color[] colours = new Color[pallete];
-
- for (int i = 0; i < pallete; i++)
+ using (Bitmap gradientmapLd = new Bitmap("defaultstripe.png"))
{
- colours[i] = gradientmapLd.GetPixel(0, i);
+ pallete = gradientmapLd.Height;
+
+ bmp = new Bitmap(map.Width, map.Height);
+ colours = new Color[pallete];
+
+ for (int i = 0; i < pallete; i++)
+ {
+ colours[i] = gradientmapLd.GetPixel(0, i);
+ }
}
for (int y = 0; y < map.Height; y++)
diff --git a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/JPEG.cs b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/JPEG.cs
index 699d67a440..9cc767a43e 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/JPEG.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/JPEG.cs
@@ -99,16 +99,21 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
private static Bitmap CreateBitmapFromMap(ITerrainChannel map)
{
- Bitmap gradientmapLd = new Bitmap("defaultstripe.png");
+ int pallete;
+ Bitmap bmp;
+ Color[] colours;
- int pallete = gradientmapLd.Height;
-
- Bitmap bmp = new Bitmap(map.Width, map.Height);
- Color[] colours = new Color[pallete];
-
- for (int i = 0; i < pallete; i++)
+ using (Bitmap gradientmapLd = new Bitmap("defaultstripe.png"))
{
- colours[i] = gradientmapLd.GetPixel(0, i);
+ pallete = gradientmapLd.Height;
+
+ bmp = new Bitmap(map.Width, map.Height);
+ colours = new Color[pallete];
+
+ for (int i = 0; i < pallete; i++)
+ {
+ colours[i] = gradientmapLd.GetPixel(0, i);
+ }
}
for (int y = 0; y < map.Height; y++)
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
index 0430ef60d7..19dffc35ac 100644
--- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
@@ -154,7 +154,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
UUID mapTile = m_HGMapImage;
string filename = string.Empty;
- Bitmap bitmap = null;
+
try
{
WebClient c = new WebClient();
@@ -167,11 +167,18 @@ namespace OpenSim.Services.Connectors.Hypergrid
c.DownloadFile(imageURL, filename);
}
else
+ {
m_log.DebugFormat("[GATEKEEPER SERVICE CONNECTOR]: using cached image");
+ }
- bitmap = new Bitmap(filename);
- //m_log.Debug("Size: " + m.PhysicalDimension.Height + "-" + m.PhysicalDimension.Width);
- byte[] imageData = OpenJPEG.EncodeFromImage(bitmap, true);
+ byte[] imageData = null;
+
+ using (Bitmap bitmap = new Bitmap(filename))
+ {
+ //m_log.Debug("Size: " + m.PhysicalDimension.Height + "-" + m.PhysicalDimension.Width);
+ imageData = OpenJPEG.EncodeFromImage(bitmap, true);
+ }
+
AssetBase ass = new AssetBase(UUID.Random(), "region " + name, (sbyte)AssetType.Texture, regionID.ToString());
// !!! for now