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.