Skip to content

Commit 73cfedd

Browse files
#113 Incorrect implementation of Double-checked locking
1 parent 1396e88 commit 73cfedd

43 files changed

Lines changed: 275 additions & 320 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AI_CONTEXT_LARGE.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12591,15 +12591,6 @@ Atomically generated smart tag with value "SyncRoot".
1259112591
</blockquote></details>
1259212592

1259312593

12594-
<details><summary>Field Override</summary><blockquote>
12595-
12596-
Atomically generated smart tag with value "Override".
12597-
It's used for:
12598-
12599-
class _Generator__OverrideIdProvider_ <-- _IIdGenerator_(Override) -- _IdGenerator_ as _PerResolve_
12600-
</blockquote></details>
12601-
12602-
1260312594
<details><summary>Field CompositionClass</summary><blockquote>
1260412595

1260512596
Atomically generated smart tag with value "CompositionClass".
@@ -12618,21 +12609,30 @@ Atomically generated smart tag with value "UsingDeclarations".
1261812609
</blockquote></details>
1261912610

1262012611

12621-
<details><summary>Field Overrider</summary><blockquote>
12612+
<details><summary>Field VarName</summary><blockquote>
1262212613

12623-
Atomically generated smart tag with value "Overrider".
12614+
Atomically generated smart tag with value "VarName".
1262412615
It's used for:
1262512616

12626-
class _Generator__DependencyGraphBuilder_ <-- _IGraphRewriter_(Overrider) -- _GraphOverrider_ as _PerBlock_
12617+
class _Generator__VarsMap_ <-- _IIdGenerator_(VarName) -- _IdGenerator_ as _Transient_
1262712618
</blockquote></details>
1262812619

1262912620

12630-
<details><summary>Field VarName</summary><blockquote>
12621+
<details><summary>Field Override</summary><blockquote>
1263112622

12632-
Atomically generated smart tag with value "VarName".
12623+
Atomically generated smart tag with value "Override".
1263312624
It's used for:
1263412625

12635-
class _Generator__VarsMap_ <-- _IIdGenerator_(VarName) -- _IdGenerator_ as _Transient_
12626+
class _Generator__OverrideIdProvider_ <-- _IIdGenerator_(Override) -- _IdGenerator_ as _PerResolve_
12627+
</blockquote></details>
12628+
12629+
12630+
<details><summary>Field Overrider</summary><blockquote>
12631+
12632+
Atomically generated smart tag with value "Overrider".
12633+
It's used for:
12634+
12635+
class _Generator__DependencyGraphBuilder_ <-- _IGraphRewriter_(Overrider) -- _GraphOverrider_ as _PerBlock_
1263612636
</blockquote></details>
1263712637

1263812638

README.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3782,15 +3782,6 @@ Atomically generated smart tag with value "SyncRoot".
37823782
</blockquote></details>
37833783

37843784

3785-
<details><summary>Field Override</summary><blockquote>
3786-
3787-
Atomically generated smart tag with value "Override".
3788-
It's used for:
3789-
3790-
class _Generator__OverrideIdProvider_ <-- _IIdGenerator_(Override) -- _IdGenerator_ as _PerResolve_
3791-
</blockquote></details>
3792-
3793-
37943785
<details><summary>Field CompositionClass</summary><blockquote>
37953786

37963787
Atomically generated smart tag with value "CompositionClass".
@@ -3809,21 +3800,30 @@ Atomically generated smart tag with value "UsingDeclarations".
38093800
</blockquote></details>
38103801

38113802

3812-
<details><summary>Field Overrider</summary><blockquote>
3803+
<details><summary>Field VarName</summary><blockquote>
38133804

3814-
Atomically generated smart tag with value "Overrider".
3805+
Atomically generated smart tag with value "VarName".
38153806
It's used for:
38163807

3817-
class _Generator__DependencyGraphBuilder_ <-- _IGraphRewriter_(Overrider) -- _GraphOverrider_ as _PerBlock_
3808+
class _Generator__VarsMap_ <-- _IIdGenerator_(VarName) -- _IdGenerator_ as _Transient_
38183809
</blockquote></details>
38193810

38203811

3821-
<details><summary>Field VarName</summary><blockquote>
3812+
<details><summary>Field Override</summary><blockquote>
38223813

3823-
Atomically generated smart tag with value "VarName".
3814+
Atomically generated smart tag with value "Override".
38243815
It's used for:
38253816

3826-
class _Generator__VarsMap_ <-- _IIdGenerator_(VarName) -- _IdGenerator_ as _Transient_
3817+
class _Generator__OverrideIdProvider_ <-- _IIdGenerator_(Override) -- _IdGenerator_ as _PerResolve_
3818+
</blockquote></details>
3819+
3820+
3821+
<details><summary>Field Overrider</summary><blockquote>
3822+
3823+
Atomically generated smart tag with value "Overrider".
3824+
It's used for:
3825+
3826+
class _Generator__DependencyGraphBuilder_ <-- _IGraphRewriter_(Overrider) -- _GraphOverrider_ as _PerBlock_
38273827
</blockquote></details>
38283828

38293829

readme/accumulators.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,15 @@ partial class Composition
108108
var blockMyAccumulator1 = new MyAccumulator();
109109
var blockAbcDependency5 = new AbcDependency();
110110
if (_root._singleXyzDependency54 is null)
111-
{
112111
lock (_lock)
113-
{
114-
XyzDependency _singleXyzDependency54Temp;
115-
_singleXyzDependency54Temp = new XyzDependency();
116-
blockMyAccumulator1.Add(_singleXyzDependency54Temp);
117-
Thread.MemoryBarrier();
118-
_root._singleXyzDependency54 = _singleXyzDependency54Temp;
119-
}
120-
}
112+
if (_root._singleXyzDependency54 is null)
113+
{
114+
XyzDependency _singleXyzDependency54Temp;
115+
_singleXyzDependency54Temp = new XyzDependency();
116+
blockMyAccumulator1.Add(_singleXyzDependency54Temp);
117+
Thread.MemoryBarrier();
118+
_root._singleXyzDependency54 = _singleXyzDependency54Temp;
119+
}
121120

122121
var transAbcDependency3 = new AbcDependency();
123122
lock (_lock)

readme/async-disposable-scope.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,12 @@ partial class Composition: IDisposable, IAsyncDisposable
152152
get
153153
{
154154
if (_scopedDependency52 is null)
155-
{
156155
lock (_lock)
157-
{
158-
_scopedDependency52 = new Dependency();
159-
_disposables[_disposeIndex++] = _scopedDependency52;
160-
}
161-
}
156+
if (_scopedDependency52 is null)
157+
{
158+
_scopedDependency52 = new Dependency();
159+
_disposables[_disposeIndex++] = _scopedDependency52;
160+
}
162161

163162
return new Service(_scopedDependency52);
164163
}

readme/async-disposable-singleton.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,12 @@ partial class Composition: IDisposable, IAsyncDisposable
117117
get
118118
{
119119
if (_root._singleDependency52 is null)
120-
{
121120
lock (_lock)
122-
{
123-
_root._singleDependency52 = new Dependency();
124-
_root._disposables[_root._disposeIndex++] = _root._singleDependency52;
125-
}
126-
}
121+
if (_root._singleDependency52 is null)
122+
{
123+
_root._singleDependency52 = new Dependency();
124+
_root._disposables[_root._disposeIndex++] = _root._singleDependency52;
125+
}
127126

128127
return new Service(_root._singleDependency52);
129128
}

readme/auto-scoped.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,11 @@ partial class Composition
152152
get
153153
{
154154
if (_scopedDependency52 is null)
155-
{
156155
lock (_lock)
157-
{
158-
_scopedDependency52 = new Dependency();
159-
}
160-
}
156+
if (_scopedDependency52 is null)
157+
{
158+
_scopedDependency52 = new Dependency();
159+
}
161160

162161
return new Service(_scopedDependency52);
163162
}

readme/basic-unity-use-case.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,11 @@ partial class Composition
127127
Clock transClock;
128128
Clock localBuildingInstance15 = buildingInstance;
129129
if (_root._singleClockService52 is null)
130-
{
131130
lock (_lock)
132-
{
133-
_root._singleClockService52 = new ClockService();
134-
}
135-
}
131+
if (_root._singleClockService52 is null)
132+
{
133+
_root._singleClockService52 = new ClockService();
134+
}
136135

137136
localBuildingInstance15.ClockService = _root._singleClockService52;
138137
transClock = localBuildingInstance15;

readme/bind-attribute-for-a-generic-type.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,11 @@ partial class Composition
110110
{
111111
IDependency<int> transIDependency1;
112112
if (_root._singleFacade52 is null)
113-
{
114113
lock (_lock)
115-
{
116-
_root._singleFacade52 = new Facade();
117-
}
118-
}
114+
if (_root._singleFacade52 is null)
115+
{
116+
_root._singleFacade52 = new Facade();
117+
}
119118

120119
Facade localInstance_1182D1276 = _root._singleFacade52;
121120
transIDependency1 = localInstance_1182D1276.GetDependency<int>();

readme/bind-attribute-with-lifetime-and-tag.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,18 +107,17 @@ partial class Composition
107107
get
108108
{
109109
if (_root._singleIDependency is null)
110-
{
111110
lock (_lock)
112-
{
113-
if (_root._singleFacade52 is null)
111+
if (_root._singleIDependency is null)
114112
{
115-
_root._singleFacade52 = new Facade();
116-
}
113+
if (_root._singleFacade52 is null)
114+
{
115+
_root._singleFacade52 = new Facade();
116+
}
117117

118-
Facade localInstance_1182D1278 = _root._singleFacade52;
119-
_root._singleIDependency = localInstance_1182D1278.Dependency;
120-
}
121-
}
118+
Facade localInstance_1182D1278 = _root._singleFacade52;
119+
_root._singleIDependency = localInstance_1182D1278.Dependency;
120+
}
122121

123122
return new Service(_root._singleIDependency);
124123
}

readme/bind-attribute.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,11 @@ partial class Composition
111111
{
112112
IDependency transIDependency1;
113113
if (_root._singleFacade52 is null)
114-
{
115114
lock (_lock)
116-
{
117-
_root._singleFacade52 = new Facade();
118-
}
119-
}
115+
if (_root._singleFacade52 is null)
116+
{
117+
_root._singleFacade52 = new Facade();
118+
}
120119

121120
Facade localInstance_1182D1277 = _root._singleFacade52;
122121
transIDependency1 = localInstance_1182D1277.Dependency;

0 commit comments

Comments
 (0)