/// <summary>
        /// Does this user have a registered texture download service?
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="textureService"></param>
        /// <returns>A UserTextureDownloadService or null in the output parameter, and true or false accordingly.</returns>
        private bool TryGetUserTextureService(IClientAPI client, out UserTextureDownloadService textureService)
        {
            lock (m_userTextureServices)
            {
                if (m_userTextureServices.TryGetValue(client.AgentId, out textureService))
                {
                    //m_log.DebugFormat("[TEXTURE MODULE]: Found existing UserTextureServices in ", m_scene.RegionInfo.RegionName);
                    return(true);
                }

                textureService = null;
                return(false);
            }
        }
        /// I'm commenting this out, and replacing it with the implementation below, which
        /// may return a null value. This is necessary for avoiding race conditions 
        /// recreating UserTextureServices for clients that have just been closed.
        /// That behavior of always returning a UserTextureServices was causing the
        /// A-B-A problem (mantis #2855).
        /// 
        ///// <summary>
        ///// Does this user have a registered texture download service?
        ///// </summary>
        ///// <param name="userID"></param>
        ///// <param name="textureService"></param>
        ///// <returns>Always returns true, since a service is created if one does not already exist</returns>
        //private bool TryGetUserTextureService(
        //    IClientAPI client, out UserTextureDownloadService textureService)
        //{
        //    lock (m_userTextureServices)
        //    {
        //        if (m_userTextureServices.TryGetValue(client.AgentId, out textureService))
        //        {
        //            //m_log.DebugFormat("[TEXTURE MODULE]: Found existing UserTextureServices in ", m_scene.RegionInfo.RegionName);
        //            return true;
        //        }

        //        m_log.DebugFormat("[TEXTURE MODULE]: Creating new UserTextureServices in ", m_scene.RegionInfo.RegionName);
        //        textureService = new UserTextureDownloadService(client, m_scene, m_queueSenders);
        //        m_userTextureServices.Add(client.AgentId, textureService);

        //        return true;
        //    }
        //}

        /// <summary>
        /// Does this user have a registered texture download service?
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="textureService"></param>
        /// <returns>A UserTextureDownloadService or null in the output parameter, and true or false accordingly.</returns>
        private bool TryGetUserTextureService(IClientAPI client, out UserTextureDownloadService textureService)
        {
            lock (m_userTextureServices)
            {
                if (m_userTextureServices.TryGetValue(client.AgentId, out textureService))
                {
                    //m_log.DebugFormat("[TEXTURE MODULE]: Found existing UserTextureServices in ", m_scene.RegionInfo.RegionName);
                    return true;
                }

                textureService = null;
                return false;
            }
        }