Skip to content

Commit bd5a153

Browse files
committed
Merge DisposePacketCache
This also allows _writePacketCache to be migrated to TdsParserStateObjectNative in netfx.
1 parent fe5d81c commit bd5a153

File tree

5 files changed

+33
-19
lines changed

5 files changed

+33
-19
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,6 @@ internal abstract void CreatePhysicalSNIHandle(
9696

9797
internal abstract void Dispose();
9898

99-
internal abstract void DisposePacketCache();
100-
10199
internal abstract uint CheckConnection();
102100

103101
internal int DecrementPendingCallbacks(bool release)

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,8 +445,16 @@ internal override void DisposePacketCache()
445445
{
446446
lock (_writePacketLockObject)
447447
{
448-
_writePacketCache.Dispose();
449-
// Do not set _writePacketCache to null, just in case a WriteAsyncCallback completes after this point
448+
#if NETFRAMEWORK
449+
RuntimeHelpers.PrepareConstrainedRegions();
450+
#endif
451+
try
452+
{ }
453+
finally
454+
{
455+
_writePacketCache.Dispose();
456+
// Do not set _writePacketCache to null, just in case a WriteAsyncCallback completes after this point
457+
}
450458
}
451459
}
452460

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParserStateObject.netfx.cs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ internal partial class TdsParserStateObject
2525
// SNI variables // multiple resultsets in one batch.
2626
protected SNIPacket _sniPacket = null; // Will have to re-vamp this for MARS
2727
internal SNIPacket _sniAsyncAttnPacket = null; // Packet to use to send Attn
28-
protected readonly WritePacketCache _writePacketCache = new WritePacketCache(); // Store write packets that are ready to be re-used
2928

3029
// Async variables
3130
private GCHandle _gcHandle; // keeps this object alive until we're closed.
@@ -196,20 +195,7 @@ internal void Dispose()
196195
}
197196
}
198197

199-
if (_writePacketCache != null)
200-
{
201-
lock (_writePacketLockObject)
202-
{
203-
RuntimeHelpers.PrepareConstrainedRegions();
204-
try
205-
{ }
206-
finally
207-
{
208-
_writePacketCache.Dispose();
209-
// Do not set _writePacketCache to null, just in case a WriteAsyncCallback completes after this point
210-
}
211-
}
212-
}
198+
DisposePacketCache();
213199
}
214200

215201
/// <summary>

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParserStateObjectNative.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Collections.Generic;
77
using System.Diagnostics;
8+
using System.Runtime.CompilerServices;
89
using System.Threading.Tasks;
910
using Interop.Windows.Sni;
1011
using Microsoft.Data.Common;
@@ -13,6 +14,8 @@ namespace Microsoft.Data.SqlClient
1314
{
1415
internal class TdsParserStateObjectNative : TdsParserStateObject
1516
{
17+
private readonly WritePacketCache _writePacketCache = new WritePacketCache(); // Store write packets that are ready to be re-used
18+
1619
private readonly Dictionary<IntPtr, SNIPacket> _pendingWritePackets = new Dictionary<IntPtr, SNIPacket>(); // Stores write packets that have been sent to SNI, but have not yet finished writing (i.e. we are waiting for SNI's callback)
1720

1821
internal TdsParserStateObjectNative(TdsParser parser, TdsParserStateObject physicalConnection, bool async)
@@ -172,6 +175,23 @@ internal override uint EnableMars(ref uint info)
172175
internal override uint SetConnectionBufferSize(ref uint unsignedPacketSize)
173176
=> SniNativeWrapper.SniSetInfo(Handle, QueryType.SNI_QUERY_CONN_BUFSIZE, ref unsignedPacketSize);
174177

178+
internal override void DisposePacketCache()
179+
{
180+
lock (_writePacketLockObject)
181+
{
182+
#if NETFRAMEWORK
183+
RuntimeHelpers.PrepareConstrainedRegions();
184+
#endif
185+
try
186+
{ }
187+
finally
188+
{
189+
_writePacketCache.Dispose();
190+
// Do not set _writePacketCache to null, just in case a WriteAsyncCallback completes after this point
191+
}
192+
}
193+
}
194+
175195
internal override SspiContextProvider CreateSspiContextProvider() => new NativeSspiContextProvider();
176196
}
177197
}

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/TdsParserStateObject.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,8 @@ internal long TimeoutTime
519519

520520
internal abstract uint SetConnectionBufferSize(ref uint unsignedPacketSize);
521521

522+
internal abstract void DisposePacketCache();
523+
522524
internal int GetTimeoutRemaining()
523525
{
524526
int remaining;

0 commit comments

Comments
 (0)