Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ AddIter()

void System.Transactions.TransactionTable.AddIter ( InternalTransaction txNew)
inlineprivate

Definition at line 83 of file TransactionTable.cs.

84 {
85 BucketSet bucketSet = _headBucketSet;
86 while (bucketSet.AbsoluteTimeout != txNew.AbsoluteTimeout)
87 {
88 BucketSet bucketSet2 = null;
89 do
90 {
91 WeakReference weakReference = (WeakReference)bucketSet.nextSetWeak;
92 BucketSet bucketSet3 = null;
93 if (weakReference != null)
94 {
95 bucketSet3 = (BucketSet)weakReference.Target;
96 }
97 if (bucketSet3 == null)
98 {
99 BucketSet bucketSet4 = new BucketSet(this, txNew.AbsoluteTimeout);
100 WeakReference value = new WeakReference(bucketSet4);
101 WeakReference weakReference2 = (WeakReference)Interlocked.CompareExchange(ref bucketSet.nextSetWeak, value, weakReference);
102 if (weakReference2 == weakReference)
103 {
104 bucketSet4.prevSet = bucketSet;
105 }
106 }
107 else
108 {
109 bucketSet2 = bucketSet;
110 bucketSet = bucketSet3;
111 }
112 }
113 while (bucketSet.AbsoluteTimeout > txNew.AbsoluteTimeout);
114 if (bucketSet.AbsoluteTimeout == txNew.AbsoluteTimeout)
115 {
116 continue;
117 }
118 BucketSet bucketSet5 = new BucketSet(this, txNew.AbsoluteTimeout);
119 WeakReference value2 = new WeakReference(bucketSet5);
120 bucketSet5.nextSetWeak = bucketSet2.nextSetWeak;
121 WeakReference weakReference3 = (WeakReference)Interlocked.CompareExchange(ref bucketSet2.nextSetWeak, value2, bucketSet5.nextSetWeak);
122 if (weakReference3 == bucketSet5.nextSetWeak)
123 {
124 if (weakReference3 != null)
125 {
126 BucketSet bucketSet6 = (BucketSet)weakReference3.Target;
127 if (bucketSet6 != null)
128 {
129 bucketSet6.prevSet = bucketSet5;
130 }
131 }
132 bucketSet5.prevSet = bucketSet2;
133 }
134 bucketSet = bucketSet2;
135 bucketSet2 = null;
136 }
137 bucketSet.Add(txNew);
138 }
static int CompareExchange(ref int location1, int value, int comparand)

References System.Transactions.TransactionTable._headBucketSet, System.Transactions.BucketSet.AbsoluteTimeout, System.Transactions.InternalTransaction.AbsoluteTimeout, System.Transactions.BucketSet.Add(), System.Threading.Interlocked.CompareExchange(), System.Transactions.BucketSet.nextSetWeak, System.WeakReference< T >.Target, and System.value.

Referenced by System.Transactions.TransactionTable.Add().