diff --git a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs index 42d09eba76..4d0568d9a2 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs @@ -247,6 +247,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (m_asset == null) { + m_log.Warn("[J2KIMAGE]: Sending ImageNotInDatabase for texture " + TextureID); client.SendImageNotFound(TextureID); return true; } @@ -384,8 +385,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (asset == null || asset.Data == null) { - m_asset = null; - IsDecoded = true; + if (m_imageManager.MissingImage != null) + { + m_asset = m_imageManager.MissingImage.Data; + } + else + { + m_asset = null; + IsDecoded = true; + } } else { diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs index bdb33dd726..41dd4d115a 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs @@ -54,6 +54,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private bool m_shuttingdown; + private AssetBase m_missingImage; private IAssetService m_assetCache; private IJ2KDecoder m_j2kDecodeModule; @@ -72,11 +73,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// public IClientAPI Client { get; private set; } + public AssetBase MissingImage { get { return m_missingImage; } } + public LLImageManager(IClientAPI client, IAssetService pAssetCache, IJ2KDecoder pJ2kDecodeModule) { Client = client; m_assetCache = pAssetCache; + if (pAssetCache != null) + m_missingImage = pAssetCache.Get("5748decc-f629-461c-9a36-a35a221fe21f"); + + if (m_missingImage == null) + m_log.Error("[ClientView] - Couldn't set missing image asset, falling back to missing image packet. This is known to crash the client"); + m_j2kDecodeModule = pJ2kDecodeModule; }