From commits-return-67-apmail-logging-commits-archive=logging.apache.org@logging.apache.org Mon Sep 12 12:36:43 2011 Return-Path: X-Original-To: apmail-logging-commits-archive@minotaur.apache.org Delivered-To: apmail-logging-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6F6C874FE for ; Mon, 12 Sep 2011 12:36:43 +0000 (UTC) Received: (qmail 9660 invoked by uid 500); 12 Sep 2011 12:36:42 -0000 Delivered-To: apmail-logging-commits-archive@logging.apache.org Received: (qmail 9531 invoked by uid 500); 12 Sep 2011 12:36:36 -0000 Mailing-List: contact commits-help@logging.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@logging.apache.org Delivered-To: mailing list commits@logging.apache.org Received: (qmail 9438 invoked by uid 99); 12 Sep 2011 12:36:30 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Sep 2011 12:36:30 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Sep 2011 12:36:27 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id A9D562388A02; Mon, 12 Sep 2011 12:36:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1169711 - in /logging/log4net/trunk/src: Appender/AppenderSkeleton.cs Util/PatternConverter.cs Date: Mon, 12 Sep 2011 12:36:06 -0000 To: commits@logging.apache.org From: bodewig@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110912123606.A9D562388A02@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: bodewig Date: Mon Sep 12 12:36:06 2011 New Revision: 1169711 URL: http://svn.apache.org/viewvc?rev=1169711&view=rev Log: Race-Condition via shared StringBuilder in ReUsableStringWriter. LOG4NET-76 Modified: logging/log4net/trunk/src/Appender/AppenderSkeleton.cs logging/log4net/trunk/src/Util/PatternConverter.cs Modified: logging/log4net/trunk/src/Appender/AppenderSkeleton.cs URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Appender/AppenderSkeleton.cs?rev=1169711&r1=1169710&r2=1169711&view=diff ============================================================================== --- logging/log4net/trunk/src/Appender/AppenderSkeleton.cs (original) +++ logging/log4net/trunk/src/Appender/AppenderSkeleton.cs Mon Sep 12 12:36:06 2011 @@ -697,11 +697,14 @@ namespace log4net.Appender m_renderWriter = new ReusableStringWriter(System.Globalization.CultureInfo.InvariantCulture); } - // Reset the writer so we can reuse it - m_renderWriter.Reset(c_renderBufferMaxCapacity, c_renderBufferSize); - - RenderLoggingEvent(m_renderWriter, loggingEvent); - return m_renderWriter.ToString(); + lock (m_renderWriter) + { + // Reset the writer so we can reuse it + m_renderWriter.Reset(c_renderBufferMaxCapacity, c_renderBufferSize); + + RenderLoggingEvent(m_renderWriter, loggingEvent); + return m_renderWriter.ToString(); + } } /// Modified: logging/log4net/trunk/src/Util/PatternConverter.cs URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Util/PatternConverter.cs?rev=1169711&r1=1169710&r2=1169711&view=diff ============================================================================== --- logging/log4net/trunk/src/Util/PatternConverter.cs (original) +++ logging/log4net/trunk/src/Util/PatternConverter.cs Mon Sep 12 12:36:06 2011 @@ -174,33 +174,43 @@ namespace log4net.Util } else { - m_formatWriter.Reset(c_renderBufferMaxCapacity, c_renderBufferSize); + string msg = null; + int len; + lock (m_formatWriter) + { + m_formatWriter.Reset(c_renderBufferMaxCapacity, c_renderBufferSize); + + Convert(m_formatWriter, state); + + StringBuilder buf = m_formatWriter.GetStringBuilder(); + len = buf.Length; + if (len > m_max) + { + msg = buf.ToString(len - m_max, m_max); + len = m_max; + } + else + { + msg = buf.ToString(); + } + } - Convert(m_formatWriter, state); - - StringBuilder buf = m_formatWriter.GetStringBuilder(); - int len = buf.Length; - - if (len > m_max) - { - writer.Write(buf.ToString(len - m_max, m_max)); - } - else if (len < m_min) + if (len < m_min) { if (m_leftAlign) { - writer.Write(buf.ToString()); + writer.Write(msg); SpacePad(writer, m_min - len); } else { SpacePad(writer, m_min - len); - writer.Write(buf.ToString()); + writer.Write(msg); } } else { - writer.Write(buf.ToString()); + writer.Write(msg); } } }