Skip to content

Commit b392f59

Browse files
committed
correct internal connection transaction promotion
1 parent c541fac commit b392f59

File tree

4 files changed

+17
-3
lines changed

4 files changed

+17
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2047,7 +2047,7 @@ internal void OnEnvChange(SqlEnvChange rec)
20472047
break;
20482048

20492049
case TdsEnums.ENV_PROMOTETRANSACTION:
2050-
byte[] dtcToken = null;
2050+
byte[] dtcToken;
20512051
if (rec._newBinRented)
20522052
{
20532053
dtcToken = new byte[rec._newLength];

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2506,7 +2506,18 @@ internal void OnEnvChange(SqlEnvChange rec)
25062506
break;
25072507

25082508
case TdsEnums.ENV_PROMOTETRANSACTION:
2509-
PromotedDTCToken = rec._newBinValue;
2509+
byte[] dtcToken;
2510+
if (rec._newBinRented)
2511+
{
2512+
dtcToken = new byte[rec._newLength];
2513+
Buffer.BlockCopy(rec._newBinValue, 0, dtcToken, 0, dtcToken.Length);
2514+
}
2515+
else
2516+
{
2517+
dtcToken = rec._newBinValue;
2518+
rec._newBinValue = null;
2519+
}
2520+
PromotedDTCToken = dtcToken;
25102521
break;
25112522

25122523
case TdsEnums.ENV_TRANSACTIONENDED:

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlEnvChange.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ internal void Clear()
4848
{
4949
ArrayPool<byte>.Shared.Return(_newBinValue);
5050
}
51-
5251
_newBinValue = null;
5352
}
5453
if (_oldBinValue != null)

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionEnlistmentTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public static void TestManualEnlistment_Enlist_TxScopeComplete()
5151
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))]
5252
public static void TestEnlistmentPrepare_TxScopeComplete()
5353
{
54+
if (!System.Diagnostics.Debugger.IsAttached)
55+
{
56+
System.Diagnostics.Debugger.Launch();
57+
}
5458
try
5559
{
5660
using TransactionScope txScope = new(TransactionScopeOption.RequiresNew, new TransactionOptions()

0 commit comments

Comments
 (0)