Skip to content

Commit a3b5c48

Browse files
authored
Merge branch 'main' into dev/paul/app-context-switch-test-helper
2 parents 9d0d831 + 0c5155d commit a3b5c48

18 files changed

+2828
-5213
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,7 @@ public SqlConnectionStringBuilder(string connectionString) { }
10521052
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/DataSource/*'/>
10531053
[System.ComponentModel.DisplayNameAttribute("Data Source")]
10541054
[System.ComponentModel.RefreshPropertiesAttribute(System.ComponentModel.RefreshProperties.All)]
1055-
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter")]
1055+
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter, Microsoft.Data.SqlClient")]
10561056
public string DataSource { get { throw null; } set { } }
10571057
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/AttestationProtocol/*' />
10581058
[System.ComponentModel.DisplayNameAttribute("Attestation Protocol")]
@@ -1086,7 +1086,7 @@ public SqlConnectionStringBuilder(string connectionString) { }
10861086
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/FailoverPartner/*'/>
10871087
[System.ComponentModel.DisplayNameAttribute("Failover Partner")]
10881088
[System.ComponentModel.RefreshPropertiesAttribute(System.ComponentModel.RefreshProperties.All)]
1089-
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter")]
1089+
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter, Microsoft.Data.SqlClient")]
10901090
public string FailoverPartner { get { throw null; } set { } }
10911091
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/FailoverPartnerSPN/*'/>
10921092
[System.ComponentModel.DisplayNameAttribute("Failover Partner SPN")]

src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -878,8 +878,8 @@
878878
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\LocalDb\LocalDbApi.Windows.cs">
879879
<Link>Microsoft\Data\SqlClient\LocalDb\LocalDbApi.Windows.cs</Link>
880880
</Compile>
881-
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\PacketHandle.netcore.Windows.cs">
882-
<Link>Microsoft\Data\SqlClient\PacketHandle.netcore.Windows.cs</Link>
881+
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\PacketHandle.Windows.cs">
882+
<Link>Microsoft\Data\SqlClient\PacketHandle.Windows.cs</Link>
883883
</Compile>
884884
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\SessionHandle.Windows.cs">
885885
<Link>Microsoft\Data\SqlClient\SessionHandle.Windows.cs</Link>
@@ -973,8 +973,9 @@
973973
<Link>Resources\%(RecursiveDir)%(Filename)%(Extension)</Link>
974974
<LogicalName>Microsoft.Data.SqlClient.Resources.%(Filename).resources</LogicalName>
975975
</EmbeddedResource>
976-
<EmbeddedResource Include="Resources\Microsoft.Data.SqlClient.SqlMetaData.xml">
976+
<EmbeddedResource Include="$(CommonSourceRoot)Resources\Microsoft.Data.SqlClient.SqlMetaData.xml">
977977
<LogicalName>Microsoft.Data.SqlClient.SqlMetaData.xml</LogicalName>
978+
<Link>Resources\Microsoft.Data.SqlClient.SqlMetaData.xml</Link>
978979
</EmbeddedResource>
979980
</ItemGroup>
980981

src/Microsoft.Data.SqlClient/netcore/src/Resources/Microsoft.Data.SqlClient.SqlMetaData.xml

Lines changed: 0 additions & 2539 deletions
This file was deleted.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ public SqlConnectionStringBuilder(string connectionString) { }
10381038
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/DataSource/*'/>
10391039
[System.ComponentModel.DisplayNameAttribute("Data Source")]
10401040
[System.ComponentModel.RefreshPropertiesAttribute(System.ComponentModel.RefreshProperties.All)]
1041-
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter")]
1041+
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter, Microsoft.Data.SqlClient")]
10421042
public string DataSource { get { throw null; } set { } }
10431043
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/EnclaveAttestationUrl/*'/>
10441044
[System.ComponentModel.DisplayNameAttribute("Enclave Attestation Url")]
@@ -1072,7 +1072,7 @@ public SqlConnectionStringBuilder(string connectionString) { }
10721072
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/FailoverPartner/*'/>
10731073
[System.ComponentModel.DisplayNameAttribute("Failover Partner")]
10741074
[System.ComponentModel.RefreshPropertiesAttribute(System.ComponentModel.RefreshProperties.All)]
1075-
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter")]
1075+
[System.ComponentModel.TypeConverter("Microsoft.Data.SqlClient.SqlConnectionStringBuilder+SqlDataSourceConverter, Microsoft.Data.SqlClient")]
10761076
public string FailoverPartner { get { throw null; } set { } }
10771077
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnectionStringBuilder.xml' path='docs/members[@name="SqlConnectionStringBuilder"]/FailoverPartnerSPN/*'/>
10781078
[System.ComponentModel.DisplayNameAttribute("Failover Partner SPN")]

src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,9 @@
447447
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\Packet.cs">
448448
<Link>Microsoft\Data\SqlClient\Packet.cs</Link>
449449
</Compile>
450+
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\PacketHandle.Windows.cs">
451+
<Link>Microsoft\Data\SqlClient\PacketHandle.Windows.cs</Link>
452+
</Compile>
450453
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\ParameterPeekAheadValue.cs">
451454
<Link>Microsoft\Data\SqlClient\ParameterPeekAheadValue.cs</Link>
452455
</Compile>
@@ -937,7 +940,6 @@
937940
<ItemGroup>
938941
<Compile Include="Microsoft\Data\Common\DbConnectionOptions.cs" />
939942
<Compile Include="Microsoft\Data\Common\DbConnectionString.cs" />
940-
<Compile Include="Microsoft\Data\SqlClient\SqlBuffer.netfx.cs" />
941943
<Compile Include="Microsoft\Data\SqlClient\SqlBulkCopy.cs" />
942944
<Compile Include="Microsoft\Data\SqlClient\SqlClientWrapperSmiStream.cs" />
943945
<Compile Include="Microsoft\Data\SqlClient\SqlClientWrapperSmiStreamChars.cs" />
@@ -979,8 +981,9 @@
979981
<Link>Resources\%(RecursiveDir)%(Filename)%(Extension)</Link>
980982
<LogicalName>Microsoft.Data.SqlClient.Resources.%(Filename).resources</LogicalName>
981983
</EmbeddedResource>
982-
<EmbeddedResource Include="Resources\Microsoft.Data.SqlClient.SqlMetaData.xml">
984+
<EmbeddedResource Include="$(CommonSourceRoot)Resources\Microsoft.Data.SqlClient.SqlMetaData.xml">
983985
<LogicalName>Microsoft.Data.SqlClient.SqlMetaData.xml</LogicalName>
986+
<Link>Resources\Microsoft.Data.SqlClient.SqlMetaData.xml</Link>
984987
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
985988
</EmbeddedResource>
986989
</ItemGroup>

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

Lines changed: 0 additions & 32 deletions
This file was deleted.

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

Lines changed: 67 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
namespace Microsoft.Data.SqlClient
2020
{
21-
using PacketHandle = IntPtr;
22-
2321
internal partial class TdsParserStateObject
2422
{
2523
protected SNIHandle _sessionHandle = null; // the SNI handle we're to work on
@@ -138,27 +136,35 @@ internal void CreatePhysicalSNIHandle(
138136
ipPreference, cachedDNSInfo, hostNameInCertificate);
139137
}
140138

141-
internal bool IsPacketEmpty(PacketHandle readPacket) => readPacket == default;
139+
internal bool IsPacketEmpty(PacketHandle readPacket)
140+
{
141+
Debug.Assert(readPacket.Type == PacketHandle.NativePointerType || readPacket.Type == 0, "unexpected packet type when requiring NativePointer");
142+
return IntPtr.Zero == readPacket.NativePointer;
143+
}
142144

143145
internal PacketHandle ReadSyncOverAsync(int timeoutRemaining, out uint error)
144146
{
145147
SNIHandle handle = Handle ?? throw ADP.ClosedConnectionError();
146-
PacketHandle readPacket = default;
147-
error = SniNativeWrapper.SniReadSyncOverAsync(handle, ref readPacket, timeoutRemaining);
148-
return readPacket;
148+
IntPtr readPacketPtr = IntPtr.Zero;
149+
error = SniNativeWrapper.SniReadSyncOverAsync(handle, ref readPacketPtr, timeoutRemaining);
150+
return PacketHandle.FromNativePointer(readPacketPtr);
149151
}
150152

151153
internal PacketHandle ReadAsync(SessionHandle handle, out uint error)
152154
{
153-
PacketHandle readPacket = default;
154-
error = SniNativeWrapper.SniReadAsync(handle.NativeHandle, ref readPacket);
155-
return readPacket;
155+
IntPtr readPacketPtr = IntPtr.Zero;
156+
error = SniNativeWrapper.SniReadAsync(handle.NativeHandle, ref readPacketPtr);
157+
return PacketHandle.FromNativePointer(readPacketPtr);
156158
}
157159

158160
internal uint CheckConnection() => SniNativeWrapper.SniCheckConnection(Handle);
159161

160-
internal void ReleasePacket(PacketHandle syncReadPacket) => SniNativeWrapper.SniPacketRelease(syncReadPacket);
161-
162+
internal void ReleasePacket(PacketHandle syncReadPacket)
163+
{
164+
Debug.Assert(syncReadPacket.Type == PacketHandle.NativePointerType, "unexpected packet type when requiring NativePointer");
165+
SniNativeWrapper.SniPacketRelease(syncReadPacket.NativePointer);
166+
}
167+
162168
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
163169
internal int DecrementPendingCallbacks(bool release)
164170
{
@@ -377,7 +383,13 @@ private void ReadSniError(TdsParserStateObject stateObj, uint error)
377383

378384
private uint GetSniPacket(PacketHandle packet, ref uint dataSize)
379385
{
380-
return SniNativeWrapper.SniPacketGetData(packet, _inBuff, ref dataSize);
386+
return SniPacketGetData(packet, _inBuff, ref dataSize);
387+
}
388+
389+
private uint SniPacketGetData(PacketHandle packet, byte[] _inBuff, ref uint dataSize)
390+
{
391+
Debug.Assert(packet.Type == PacketHandle.NativePointerType, "unexpected packet type when requiring NativePointer");
392+
return SniNativeWrapper.SniPacketGetData(packet.NativePointer, _inBuff, ref dataSize);
381393
}
382394

383395
public void ReadAsyncCallback(IntPtr key, PacketHandle packet, uint error)
@@ -411,7 +423,7 @@ public void ReadAsyncCallback(IntPtr key, PacketHandle packet, uint error)
411423
bool processFinallyBlock = true;
412424
try
413425
{
414-
Debug.Assert(IntPtr.Zero == packet || IntPtr.Zero != packet && source != null, "AsyncResult null on callback");
426+
Debug.Assert(CheckPacket(packet, source), "AsyncResult null on callback");
415427

416428
if (_parser.MARSOn)
417429
{
@@ -481,6 +493,13 @@ public void ReadAsyncCallback(IntPtr key, PacketHandle packet, uint error)
481493
}
482494
}
483495

496+
private bool CheckPacket(PacketHandle packet, TaskCompletionSource<object> source)
497+
{
498+
Debug.Assert(packet.Type == PacketHandle.NativePointerType, "unexpected packet type when requiring NativePointer");
499+
IntPtr ptr = packet.NativePointer;
500+
return IntPtr.Zero == ptr || IntPtr.Zero != ptr && source != null;
501+
}
502+
484503
#pragma warning disable 420 // a reference to a volatile field will not be treated as volatile
485504

486505
public void WriteAsyncCallback(IntPtr key, PacketHandle packet, uint sniError)
@@ -654,7 +673,7 @@ internal Task WritePacket(byte flushMode, bool canAccumulate = false)
654673

655674
#pragma warning disable 420 // a reference to a volatile field will not be treated as volatile
656675

657-
private Task SNIWritePacket(SNIPacket packet, out uint sniError, bool canAccumulate, bool callerHasConnectionLock, bool asyncClose = false)
676+
private Task SNIWritePacket(PacketHandle packet, out uint sniError, bool canAccumulate, bool callerHasConnectionLock, bool asyncClose = false)
658677
{
659678
// Check for a stored exception
660679
Exception delayedException = Interlocked.Exchange(ref _delayedWriteAsyncCallbackException, null);
@@ -696,7 +715,8 @@ private Task SNIWritePacket(SNIPacket packet, out uint sniError, bool canAccumul
696715
}
697716
finally
698717
{
699-
sniError = SniNativeWrapper.SniWritePacket(Handle, packet, sync);
718+
Debug.Assert(packet.Type == PacketHandle.NativePacketType, "unexpected packet type when requiring NativePacket");
719+
sniError = SniNativeWrapper.SniWritePacket(Handle, packet.NativePacket, sync);
700720
}
701721

702722
if (sniError == TdsEnums.SNI_SUCCESS_IO_PENDING)
@@ -790,7 +810,15 @@ private Task SNIWritePacket(SNIPacket packet, out uint sniError, bool canAccumul
790810

791811
#pragma warning restore 420
792812

793-
internal bool IsValidPacket(PacketHandle packetPointer) => packetPointer != default;
813+
internal bool IsValidPacket(PacketHandle packetPointer)
814+
{
815+
Debug.Assert(packetPointer.Type == PacketHandle.NativePointerType || packetPointer.Type == PacketHandle.NativePacketType, "unexpected packet type when requiring NativePointer");
816+
return (
817+
(packetPointer.Type == PacketHandle.NativePointerType && packetPointer.NativePointer != IntPtr.Zero)
818+
||
819+
(packetPointer.Type == PacketHandle.NativePacketType && packetPointer.NativePacket != null)
820+
);
821+
}
794822

795823
// Sends an attention signal - executing thread will consume attn.
796824
internal void SendAttention(bool mustTakeWriteLock = false, bool asyncClose = false)
@@ -805,10 +833,7 @@ internal void SendAttention(bool mustTakeWriteLock = false, bool asyncClose = fa
805833
return;
806834
}
807835

808-
SNIPacket attnPacket = new SNIPacket(Handle);
809-
_sniAsyncAttnPacket = attnPacket;
810-
811-
SniNativeWrapper.SniPacketSetData(attnPacket, SQL.AttentionHeader, TdsEnums.HEADER_LEN, null, null);
836+
PacketHandle attnPacket = CreateAndSetAttentionPacket();
812837

813838
RuntimeHelpers.PrepareConstrainedRegions();
814839
try
@@ -868,11 +893,20 @@ internal void SendAttention(bool mustTakeWriteLock = false, bool asyncClose = fa
868893
}
869894
}
870895

896+
internal PacketHandle CreateAndSetAttentionPacket()
897+
{
898+
SNIPacket attnPacket = new SNIPacket(Handle);
899+
_sniAsyncAttnPacket = attnPacket;
900+
SniNativeWrapper.SniPacketSetData(attnPacket, SQL.AttentionHeader, TdsEnums.HEADER_LEN, null, null);
901+
return PacketHandle.FromNativePacket(attnPacket);
902+
}
903+
871904
private Task WriteSni(bool canAccumulate)
872905
{
873906
// Prepare packet, and write to packet.
874-
SNIPacket packet = GetResetWritePacket();
875-
SniNativeWrapper.SniPacketSetData(packet, _outBuff, _outBytesUsed, _securePasswords, _securePasswordOffsetsInBuffer);
907+
PacketHandle packet = GetResetWritePacket();
908+
SNIPacket nativePacket = packet.NativePacket;
909+
SniNativeWrapper.SniPacketSetData(nativePacket, _outBuff, _outBytesUsed, _securePasswords, _securePasswordOffsetsInBuffer);
876910

877911
Debug.Assert(Parser.Connection._parserLock.ThreadMayHaveLock(), "Thread is writing without taking the connection lock");
878912
Task task = SNIWritePacket(packet, out _, canAccumulate, callerHasConnectionLock: true);
@@ -923,7 +957,7 @@ private Task WriteSni(bool canAccumulate)
923957
return task;
924958
}
925959

926-
internal SNIPacket GetResetWritePacket()
960+
internal PacketHandle GetResetWritePacket()
927961
{
928962
if (_sniPacket != null)
929963
{
@@ -936,7 +970,7 @@ internal SNIPacket GetResetWritePacket()
936970
_sniPacket = _writePacketCache.Take(Handle);
937971
}
938972
}
939-
return _sniPacket;
973+
return PacketHandle.FromNativePacket(_sniPacket);
940974
}
941975

942976
internal void ClearAllWritePackets()
@@ -953,8 +987,10 @@ internal void ClearAllWritePackets()
953987
}
954988
}
955989

956-
private IntPtr AddPacketToPendingList(SNIPacket packet)
990+
private PacketHandle AddPacketToPendingList(PacketHandle packetToAdd)
957991
{
992+
Debug.Assert(packetToAdd.Type == PacketHandle.NativePacketType, "unexpected packet type when requiring NativePacket");
993+
SNIPacket packet = packetToAdd.NativePacket;
958994
Debug.Assert(packet == _sniPacket, "Adding a packet other than the current packet to the pending list");
959995
_sniPacket = null;
960996
IntPtr pointer = packet.DangerousGetHandle();
@@ -964,16 +1000,17 @@ private IntPtr AddPacketToPendingList(SNIPacket packet)
9641000
_pendingWritePackets.Add(pointer, packet);
9651001
}
9661002

967-
return pointer;
1003+
return PacketHandle.FromNativePointer(pointer);
9681004
}
9691005

970-
private void RemovePacketFromPendingList(IntPtr pointer)
1006+
private void RemovePacketFromPendingList(PacketHandle ptr)
9711007
{
972-
SNIPacket recoveredPacket;
1008+
Debug.Assert(ptr.Type == PacketHandle.NativePointerType, "unexpected packet type when requiring NativePointer");
1009+
IntPtr pointer = ptr.NativePointer;
9731010

9741011
lock (_writePacketLockObject)
9751012
{
976-
if (_pendingWritePackets.TryGetValue(pointer, out recoveredPacket))
1013+
if (_pendingWritePackets.TryGetValue(pointer, out SNIPacket recoveredPacket))
9771014
{
9781015
_pendingWritePackets.Remove(pointer);
9791016
_writePacketCache.Add(recoveredPacket);
@@ -1033,6 +1070,6 @@ private void SniWriteStatisticsAndTracing()
10331070
SqlClientEventSource.Log.TryAdvancedTraceBinEvent("TdsParser.WritePacket | INFO | ADV | State Object Id {0}, Packet sent. Out buffer: {1}, Out Bytes Used: {2}", ObjectID, _outBuff, _outBytesUsed);
10341071
}
10351072

1036-
protected PacketHandle EmptyReadPacket => default;
1073+
protected PacketHandle EmptyReadPacket => PacketHandle.FromNativePointer(default);
10371074
}
10381075
}

0 commit comments

Comments
 (0)