Skip to content

Commit 644ac85

Browse files
committed
Added missing PrepareConstrainedRegions calls
These were part of the netfx exception handling
1 parent c3c5138 commit 644ac85

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlBulkCopy.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,6 +1970,9 @@ private Task WriteRowSourceToServerAsync(int columnCount, CancellationToken ctok
19701970
_parserLock.Wait(canReleaseFromAnyThread: _isAsyncBulkCopy);
19711971

19721972
TdsParser bestEffortCleanupTarget = null;
1973+
#if NETFRAMEWORK
1974+
RuntimeHelpers.PrepareConstrainedRegions();
1975+
#endif
19731976
try
19741977
{
19751978
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(_connection);
@@ -2690,6 +2693,9 @@ private Task CopyBatchesAsyncContinuedOnSuccess(BulkCopySimpleResultSet internal
26902693
private void CopyBatchesAsyncContinuedOnError(bool cleanupParser)
26912694
{
26922695
SqlInternalConnectionTds internalConnection = _connection.GetOpenTdsConnection();
2696+
#if NETFRAMEWORK
2697+
RuntimeHelpers.PrepareConstrainedRegions();
2698+
#endif
26932699
try
26942700
{
26952701
if ((cleanupParser) && (_parser != null) && (_stateObj != null))

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,9 @@ public override void ChangeDatabase(string database)
12351235
SqlClientEventSource.Log.TryCorrelationTraceEvent("SqlConnection.ChangeDatabase | API | Correlation | Object Id {0}, Activity Id {1}, Database {2}", ObjectID, ActivityCorrelator.Current, database);
12361236
TdsParser bestEffortCleanupTarget = null;
12371237

1238+
#if NETFRAMEWORK
1239+
RuntimeHelpers.PrepareConstrainedRegions();
1240+
#endif
12381241
try
12391242
{
12401243
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(this);
@@ -1323,8 +1326,11 @@ public override void Close()
13231326

13241327
SqlStatistics statistics = null;
13251328
TdsParser bestEffortCleanupTarget = null;
1326-
13271329
Exception e = null;
1330+
1331+
#if NETFRAMEWORK
1332+
RuntimeHelpers.PrepareConstrainedRegions();
1333+
#endif
13281334
try
13291335
{
13301336
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(this);

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,9 @@ internal _SqlMetaDataSet MetaData
258258
throw SQL.PendingBeginXXXExists();
259259
}
260260

261+
#if NETFRAMEWORK
262+
RuntimeHelpers.PrepareConstrainedRegions();
263+
#endif
261264
try
262265
{
263266
Debug.Assert(_stateObj == null || _stateObj._syncOverAsync, "Should not attempt pends in a synchronous call");
@@ -868,6 +871,9 @@ private void CleanPartialReadReliable()
868871
{
869872
AssertReaderState(requireData: true, permitAsync: false);
870873

874+
#if NETFRAMEWORK
875+
RuntimeHelpers.PrepareConstrainedRegions();
876+
#endif
871877
try
872878
{
873879
TdsOperationStatus result = TryCleanPartialRead();
@@ -1148,6 +1154,9 @@ private TdsOperationStatus TryCloseInternal(bool closeReader)
11481154
Connection.RemoveWeakReference(this); // This doesn't catch everything -- the connection may be closed, but it prevents dead readers from clogging the collection
11491155
}
11501156

1157+
#if NETFRAMEWORK
1158+
RuntimeHelpers.PrepareConstrainedRegions();
1159+
#endif
11511160
try
11521161
{
11531162
// IsClosed may be true if CloseReaderFromConnection was called - in which case, the session has already been closed
@@ -1774,6 +1783,9 @@ private TdsOperationStatus TryGetBytesInternal(int i, long dataIndex, byte[] buf
17741783
remaining = 0;
17751784
TdsOperationStatus result;
17761785

1786+
#if NETFRAMEWORK
1787+
RuntimeHelpers.PrepareConstrainedRegions();
1788+
#endif
17771789
try
17781790
{
17791791
int cbytes = 0;
@@ -2081,6 +2093,9 @@ internal TdsOperationStatus TryGetBytesInternalSequential(int i, byte[] buffer,
20812093
bytesRead = 0;
20822094
TdsOperationStatus result;
20832095

2096+
#if NETFRAMEWORK
2097+
RuntimeHelpers.PrepareConstrainedRegions();
2098+
#endif
20842099
try
20852100
{
20862101
if ((_sharedState._columnDataBytesRemaining == 0) || (length == 0))
@@ -2422,6 +2437,9 @@ override public long GetChars(int i, long dataIndex, char[] buffer, int bufferIn
24222437

24232438
private long GetCharsFromPlpData(int i, long dataIndex, char[] buffer, int bufferIndex, int length)
24242439
{
2440+
#if NETFRAMEWORK
2441+
RuntimeHelpers.PrepareConstrainedRegions();
2442+
#endif
24252443
try
24262444
{
24272445
long cch;
@@ -4055,6 +4073,9 @@ private TdsOperationStatus TryReadColumn(int i, bool setTimeout, bool allowParti
40554073
{
40564074
CheckDataIsReady(columnIndex: i, permitAsync: true, allowPartiallyReadColumn: allowPartiallyReadColumn, methodName: null);
40574075

4076+
#if NETFRAMEWORK
4077+
RuntimeHelpers.PrepareConstrainedRegions();
4078+
#endif
40584079
try
40594080
{
40604081
Debug.Assert(_sharedState._nextColumnHeaderToRead <= _metaData.Length, "_sharedState._nextColumnHeaderToRead too large");
@@ -4143,6 +4164,9 @@ private TdsOperationStatus TryReadColumnHeader(int i)
41434164
throw SQL.InvalidRead();
41444165
}
41454166

4167+
#if NETFRAMEWORK
4168+
RuntimeHelpers.PrepareConstrainedRegions();
4169+
#endif
41464170
try
41474171
{
41484172
return TryReadColumnInternal(i, readHeaderOnly: true);

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlTransaction.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ public override void Commit()
3131
TdsParser bestEffortCleanupTarget = null;
3232

3333
SqlClientEventSource.Log.TryCorrelationTraceEvent("SqlTransaction.Commit | API | Correlation | Object Id {0}, Activity Id {1}, Client Connection Id {2}", ObjectID, ActivityCorrelator.Current, Connection?.ClientConnectionId);
34+
#if NETFRAMEWORK
35+
RuntimeHelpers.PrepareConstrainedRegions();
36+
#endif
3437
try
3538
{
3639
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(_connection);
@@ -93,6 +96,9 @@ protected override void Dispose(bool disposing)
9396
if (disposing)
9497
{
9598
TdsParser bestEffortCleanupTarget = null;
99+
#if NETFRAMEWORK
100+
RuntimeHelpers.PrepareConstrainedRegions();
101+
#endif
96102
try
97103
{
98104
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(_connection);
@@ -144,6 +150,9 @@ public override void Rollback()
144150
SqlClientEventSource.Log.TryCorrelationTraceEvent("SqlTransaction.Rollback | API | Correlation | Object Id {0}, ActivityID {1}, Client Connection Id {2}", ObjectID, ActivityCorrelator.Current, Connection?.ClientConnectionId);
145151

146152
TdsParser bestEffortCleanupTarget = null;
153+
#if NETFRAMEWORK
154+
RuntimeHelpers.PrepareConstrainedRegions();
155+
#endif
147156
try
148157
{
149158
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(_connection);
@@ -200,6 +209,9 @@ public override void Rollback(string transactionName)
200209
{
201210
SqlStatistics statistics = null;
202211
TdsParser bestEffortCleanupTarget = null;
212+
#if NETFRAMEWORK
213+
RuntimeHelpers.PrepareConstrainedRegions();
214+
#endif
203215
try
204216
{
205217
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(_connection);
@@ -253,6 +265,9 @@ public override void Save(string savePointName)
253265
using (TryEventScope.Create("SqlTransaction.Save | API | Object Id {0} | Save Point Name '{1}'", ObjectID, savePointName))
254266
{
255267
TdsParser bestEffortCleanupTarget = null;
268+
#if NETFRAMEWORK
269+
RuntimeHelpers.PrepareConstrainedRegions();
270+
#endif
256271
try
257272
{
258273
bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(_connection);

0 commit comments

Comments
 (0)