Skip to content

Commit f209c2b

Browse files
committed
NH-3431 - Fix AbstractBatcher.CloseReader method which tried to use reader after it was disposed.
1 parent c9cf75e commit f209c2b

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

src/NHibernate/AdoNet/AbstractBatcher.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,8 @@ public void CloseReader(DbDataReader reader)
359359
var actualReader = rsw == null ? reader : rsw.Target;
360360
_readersToClose.Remove(actualReader);
361361

362+
var duration = GetReaderStopwatch(actualReader);
363+
362364
try
363365
{
364366
reader.Dispose();
@@ -370,17 +372,24 @@ public void CloseReader(DbDataReader reader)
370372
}
371373

372374
LogCloseReader();
375+
LogDuration(duration);
376+
}
373377

374-
if (!Log.IsDebugEnabled)
375-
return;
376-
377-
var nhReader = actualReader as NHybridDataReader;
378-
actualReader = nhReader == null ? actualReader : nhReader.Target;
378+
private Stopwatch GetReaderStopwatch(DbDataReader reader)
379+
{
380+
var nhReader = reader as NHybridDataReader;
381+
var actualReader = nhReader == null ? reader : nhReader.Target;
379382

380383
Stopwatch duration;
381-
if (_readersDuration.TryGetValue(actualReader, out duration) == false)
382-
return;
383-
_readersDuration.Remove(actualReader);
384+
if (_readersDuration.TryGetValue(actualReader, out duration))
385+
_readersDuration.Remove(actualReader);
386+
return duration;
387+
}
388+
389+
private static void LogDuration(Stopwatch duration)
390+
{
391+
if (!Log.IsDebugEnabled || duration == null) return;
392+
384393
Log.DebugFormat("DataReader was closed after {0} ms", duration.ElapsedMilliseconds);
385394
}
386395

0 commit comments

Comments
 (0)