DefaultPreparedCommand.ApplyParameterMap logging errors when multiple threads 
call same statement at same time.
---------------------------------------------------------------------------------------------------------------

                 Key: IBATISNET-252
                 URL: https://issues.apache.org/jira/browse/IBATISNET-252
             Project: iBatis for .NET
          Issue Type: Bug
          Components: DataMapper
    Affects Versions: DataMapper 1.6.1
         Environment: Tested and confirmed on Windows 2000 and XP with .Net 2.0
            Reporter: Michael Schall
            Priority: Blocker
         Attachments: MultiThreadedLoggingFailure.patch

If multiple threads call the same procedure at the same instance with debug 
logging turned on, the logging at the end of ApplyParameterMap will fail.  The 
StringBuilders for the logging are shared across threads and is failing when 
calling ToString.

I suggest making the StringBuilders local to the function as nothing else is 
using them anyway.  I will include a test patch to make it fail an a patch to 
fix the issue.  For the test to fail, you have to make sure logging is turned 
on!

Thanks
Mike

Failing lines:
                _logger.Debug("Statement Id: [" + statement.Id + "] Parameters: 
[" + _paramLogList.ToString(0, _paramLogList.Length - 2) + "]");
                _logger.Debug("Statement Id: [" + statement.Id + "] Types: [" + 
_typeLogList.ToString(0, _typeLogList.Length - 2) + "]");

One failing stack trace:
System.ArgumentOutOfRangeException: Length cannot be less than zero.
Parameter name: length
   at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, 
Boolean fAlwaysCopy)
   at System.Text.StringBuilder.ToString(Int32 startIndex, Int32 length)
   at 
IBatisNet.DataMapper.Commands.DefaultPreparedCommand.ApplyParameterMap(ISqlMapSession
 session, IDbCommand command, RequestScope request, IStatement statement, 
Object parameterObject) in 
C:\Projects\Framework\src\IBatisNet.DataMapper\Commands\DefaultPreparedCommand.cs:line
 242
   at IBatisNet.DataMapper.Commands.DefaultPreparedCommand.Create(RequestScope 
request, ISqlMapSession session, IStatement statement, Object parameterObject) 
in 
C:\Projects\Framework\src\IBatisNet.DataMapper\Commands\DefaultPreparedCommand.cs:line
 84
   at 
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForObject[T](ISqlMapSession
 session, Object parameterObject, T resultObject) in 
C:\Projects\Framework\src\IBatisNet.DataMapper\MappedStatements\MappedStatement.cs:line
 302
   at 
IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForObject[T](ISqlMapSession
 session, Object parameterObject) in 
C:\Projects\Framework\src\IBatisNet.DataMapper\MappedStatements\MappedStatement.cs:line
 285
   at IBatisNet.DataMapper.SqlMapper.QueryForObject[T](String statementName, 
Object parameterObject) in 
C:\Projects\Framework\src\IBatisNet.DataMapper\SqlMapper.cs:line 610



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to