Skip to content

Commit

Permalink
Fix | Fix Bulk Copy Async deadlock with custom IDataReader using SqlD…
Browse files Browse the repository at this point in the history
…ataReader internally. (#779)
  • Loading branch information
cheenamalhotra committed Nov 4, 2020
1 parent a7545de commit 30f2a4d
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 39 deletions.
Expand Up @@ -1159,6 +1159,11 @@ private Task ReadFromRowSourceAsync(CancellationToken cts)
}
else
{ // This will call Read for DataRows, DataTable and IDataReader (this includes all IDataReader except DbDataReader)
// Release lock to prevent possible deadlocks
SqlInternalConnectionTds internalConnection = _connection.GetOpenTdsConnection();
bool semaphoreLock = internalConnection._parserLock.CanBeReleasedFromAnyThread;
internalConnection._parserLock.Release();

_hasMoreRowToCopy = false;
try
{
Expand All @@ -1175,6 +1180,10 @@ private Task ReadFromRowSourceAsync(CancellationToken cts)
throw;
}
}
finally
{
internalConnection._parserLock.Wait(canReleaseFromAnyThread: semaphoreLock);
}
return null;
}
}
Expand Down

0 comments on commit 30f2a4d

Please sign in to comment.