This is an automated email from the ASF dual-hosted git repository. davydm pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-log4net.git
commit 2c44d647ff94fbc42b0785ab2e03d3ac31f7e229 Author: Davyd McColl <[email protected]> AuthorDate: Fri Jul 22 13:09:14 2022 +0200 :bug: should lock hashtables for write (LOG4NET-646) --- src/log4net/ObjectRenderer/RendererMap.cs | 51 +++++++++++++++---------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/log4net/ObjectRenderer/RendererMap.cs b/src/log4net/ObjectRenderer/RendererMap.cs index c785e27e..a20ae198 100644 --- a/src/log4net/ObjectRenderer/RendererMap.cs +++ b/src/log4net/ObjectRenderer/RendererMap.cs @@ -22,7 +22,7 @@ using System.IO; #if NETSTANDARD1_3 using System.Reflection; #endif - +using System.Collections; using log4net.Util; namespace log4net.ObjectRenderer @@ -49,30 +49,13 @@ namespace log4net.ObjectRenderer #region Member Variables - private System.Collections.Hashtable m_map; - private System.Collections.Hashtable m_cache = new System.Collections.Hashtable(); + private readonly Hashtable m_map = new(); + private readonly Hashtable m_cache = new(); private static IObjectRenderer s_defaultRenderer = new DefaultRenderer(); #endregion - #region Constructors - - /// <summary> - /// Default Constructor - /// </summary> - /// <remarks> - /// <para> - /// Default constructor. - /// </para> - /// </remarks> - public RendererMap() - { - m_map = System.Collections.Hashtable.Synchronized(new System.Collections.Hashtable()); - } - - #endregion - /// <summary> /// Render <paramref name="obj"/> using the appropriate renderer. /// </summary> @@ -137,7 +120,7 @@ namespace log4net.ObjectRenderer catch(Exception ex) { // Exception rendering the object - log4net.Util.LogLog.Error(declaringType, "Exception while rendering object of type ["+obj.GetType().FullName+"]", ex); + LogLog.Error(declaringType, "Exception while rendering object of type ["+obj.GetType().FullName+"]", ex); // return default message string objectTypeName = ""; @@ -241,7 +224,10 @@ namespace log4net.ObjectRenderer } // Add to cache - m_cache[type] = result; + lock (m_cache) + { + m_cache[type] = result; + } } return result; @@ -299,8 +285,15 @@ namespace log4net.ObjectRenderer /// </remarks> public void Clear() { - m_map.Clear(); - m_cache.Clear(); + lock (m_map) + { + m_map.Clear(); + } + + lock (m_cache) + { + m_cache.Clear(); + } } /// <summary> @@ -317,7 +310,10 @@ namespace log4net.ObjectRenderer /// </remarks> public void Put(Type typeToRender, IObjectRenderer renderer) { - m_cache.Clear(); + lock (m_cache) + { + m_cache.Clear(); + } if (typeToRender == null) { @@ -328,7 +324,10 @@ namespace log4net.ObjectRenderer throw new ArgumentNullException("renderer"); } - m_map[typeToRender] = renderer; + lock (m_map) + { + m_map[typeToRender] = renderer; + } } } }
