Skip to content

Commit d3fe4c5

Browse files
committed
Was made refactoring.
1 parent 37adffc commit d3fe4c5

File tree

11 files changed

+68
-39
lines changed

11 files changed

+68
-39
lines changed

src/MsieJavaScriptEngine/ActiveScript/ActiveScriptJsEngineBase.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ internal abstract class ActiveScriptJsEngineBase : IInnerJsEngine, IActiveScript
8383
/// <summary>
8484
/// Flag that object is destroyed
8585
/// </summary>
86-
private bool _disposed;
86+
private StatedFlag _disposedFlag = new StatedFlag();
8787

8888

8989
/// <summary>
@@ -532,10 +532,8 @@ private void Dispose(bool disposing)
532532
{
533533
_dispatcher.Invoke(DispatcherPriority.Input, (Action)(() =>
534534
{
535-
if (!_disposed)
535+
if (_disposedFlag.Set())
536536
{
537-
_disposed = true;
538-
539537
if (_dispatch != null)
540538
{
541539
ComHelpers.ReleaseComObject(ref _dispatch, !disposing);

src/MsieJavaScriptEngine/ActiveScript/ActiveScriptParseWrapper.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ internal sealed class ActiveScriptParseWrapper : IActiveScriptParseWrapper
4242
/// <summary>
4343
/// Flag that object is destroyed
4444
/// </summary>
45-
private bool _disposed;
45+
private StatedFlag _disposedFlag = new StatedFlag();
4646

4747
/// <summary>
4848
/// Gets a last COM exception
@@ -81,7 +81,7 @@ public ActiveScriptParseWrapper(IntPtr pActiveScript, IActiveScript activeScript
8181
}
8282

8383
/// <summary>
84-
/// Destructs instance of <see cref="ActiveScriptSiteWrapper"/>
84+
/// Destructs instance of <see cref="ActiveScriptParseWrapper"/>
8585
/// </summary>
8686
~ActiveScriptParseWrapper()
8787
{
@@ -96,10 +96,8 @@ public ActiveScriptParseWrapper(IntPtr pActiveScript, IActiveScript activeScript
9696
/// managed objects contained in fields of class</param>
9797
private void Dispose(bool disposing)
9898
{
99-
if (!_disposed)
99+
if (_disposedFlag.Set())
100100
{
101-
_disposed = true;
102-
103101
if (_is64Bit)
104102
{
105103
_activeScriptParse64 = null;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace MsieJavaScriptEngine
2+
{
3+
using System.Threading;
4+
5+
internal struct InterlockedStatedFlag
6+
{
7+
private int _counter;
8+
9+
10+
public bool IsSet()
11+
{
12+
return _counter != 0;
13+
}
14+
15+
public bool Set()
16+
{
17+
return Interlocked.Exchange(ref _counter, 1) == 0;
18+
}
19+
}
20+
}

src/MsieJavaScriptEngine/JsRt/ChakraJsRtJsEngineBase.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ internal abstract class ChakraJsRtJsEngineBase : IInnerJsEngine
2727
/// <summary>
2828
/// Flag indicating whether debugging started
2929
/// </summary>
30-
private bool _debuggingStarted;
30+
private StatedFlag _debuggingStartedFlag;
3131

3232

3333
/// <summary>
@@ -48,10 +48,9 @@ protected ChakraJsRtJsEngineBase(JsEngineMode engineMode, bool enableDebugging)
4848
/// </summary>
4949
protected void StartDebugging()
5050
{
51-
if (!_debuggingStarted)
51+
if (_debuggingStartedFlag.Set())
5252
{
5353
InnerStartDebugging();
54-
_debuggingStarted = true;
5554
}
5655
}
5756

src/MsieJavaScriptEngine/JsRt/Edge/ChakraEdgeJsRtJsEngine.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ internal sealed class ChakraEdgeJsRtJsEngine : ChakraJsRtJsEngineBase
4141
/// <summary>
4242
/// Flag that object is destroyed
4343
/// </summary>
44-
private bool _disposed;
44+
private StatedFlag _disposedFlag = new StatedFlag();
4545

4646

4747
/// <summary>
@@ -379,10 +379,8 @@ private void Dispose(bool disposing)
379379
{
380380
lock (_runSynchronizer)
381381
{
382-
if (!_disposed)
382+
if (_disposedFlag.Set())
383383
{
384-
_disposed = true;
385-
386384
_jsRuntime.Dispose();
387385
}
388386
}

src/MsieJavaScriptEngine/JsRt/Edge/EdgeJsScope.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ internal struct EdgeJsScope : IDisposable
1616
/// <summary>
1717
/// Whether the structure has been disposed
1818
/// </summary>
19-
private bool _disposed;
19+
private StatedFlag _disposedFlag;
2020

2121

2222
/// <summary>
@@ -25,7 +25,7 @@ internal struct EdgeJsScope : IDisposable
2525
/// <param name="context">The context to create the scope for</param>
2626
public EdgeJsScope(EdgeJsContext context)
2727
{
28-
_disposed = false;
28+
_disposedFlag = new StatedFlag();
2929
_previousContext = EdgeJsContext.Current;
3030
EdgeJsContext.Current = context;
3131
}
@@ -37,13 +37,10 @@ public EdgeJsScope(EdgeJsContext context)
3737
/// </summary>
3838
public void Dispose()
3939
{
40-
if (_disposed)
40+
if (_disposedFlag.Set())
4141
{
42-
return;
42+
EdgeJsContext.Current = _previousContext;
4343
}
44-
45-
EdgeJsContext.Current = _previousContext;
46-
_disposed = true;
4744
}
4845

4946
#endregion

src/MsieJavaScriptEngine/JsRt/Ie/ChakraIeJsRtJsEngine.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ internal sealed class ChakraIeJsRtJsEngine : ChakraJsRtJsEngineBase
4646
/// <summary>
4747
/// Flag that object is destroyed
4848
/// </summary>
49-
private bool _disposed;
49+
private StatedFlag _disposedFlag = new StatedFlag();
5050

5151

5252
/// <summary>
@@ -415,10 +415,8 @@ private void Dispose(bool disposing)
415415
{
416416
lock (_runSynchronizer)
417417
{
418-
if (!_disposed)
418+
if (_disposedFlag.Set())
419419
{
420-
_disposed = true;
421-
422420
_jsRuntime.Dispose();
423421
}
424422
}

src/MsieJavaScriptEngine/JsRt/Ie/IeJsScope.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ internal struct IeJsScope : IDisposable
1616
/// <summary>
1717
/// Whether the structure has been disposed
1818
/// </summary>
19-
private bool _disposed;
19+
private StatedFlag _disposedFlag;
2020

2121

2222
/// <summary>
@@ -25,7 +25,7 @@ internal struct IeJsScope : IDisposable
2525
/// <param name="context">The context to create the scope for</param>
2626
public IeJsScope(IeJsContext context)
2727
{
28-
_disposed = false;
28+
_disposedFlag = new StatedFlag();
2929
_previousContext = IeJsContext.Current;
3030
IeJsContext.Current = context;
3131
}
@@ -37,13 +37,10 @@ public IeJsScope(IeJsContext context)
3737
/// </summary>
3838
public void Dispose()
3939
{
40-
if (_disposed)
40+
if (_disposedFlag.Set())
4141
{
42-
return;
42+
IeJsContext.Current = _previousContext;
4343
}
44-
45-
IeJsContext.Current = _previousContext;
46-
_disposed = true;
4744
}
4845

4946
#endregion

src/MsieJavaScriptEngine/MsieJavaScriptEngine.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
<Compile Include="HostObject.cs" />
7777
<Compile Include="HostType.cs" />
7878
<Compile Include="IInnerJsEngine.cs" />
79+
<Compile Include="InterlockedStatedFlag.cs" />
7980
<Compile Include="JsEngineSettings.cs" />
8081
<Compile Include="JsRt\ChakraJsRtJsEngineBase.cs" />
8182
<Compile Include="JsRt\Edge\ChakraEdgeJsRtJsEngine.cs" />
@@ -142,6 +143,7 @@
142143
<DesignTime>True</DesignTime>
143144
<DependentUpon>Strings.ru-ru.resx</DependentUpon>
144145
</Compile>
146+
<Compile Include="StatedFlag.cs" />
145147
<Compile Include="Utilities\TypeConverter.cs" />
146148
<Compile Include="Undefined.cs" />
147149
<Compile Include="Utilities\StringBuilderExtensions.cs" />

src/MsieJavaScriptEngine/MsieJsEngine.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public sealed class MsieJsEngine : IDisposable
3434
/// <summary>
3535
/// Flag that object is destroyed
3636
/// </summary>
37-
private bool _disposed;
37+
private InterlockedStatedFlag _disposedFlag = new InterlockedStatedFlag();
3838

3939
/// <summary>
4040
/// Gets a name of JavaScript engine mode
@@ -173,7 +173,7 @@ public MsieJsEngine(JsEngineSettings settings)
173173

174174
private void VerifyNotDisposed()
175175
{
176-
if (_disposed)
176+
if (_disposedFlag.IsSet())
177177
{
178178
throw new ObjectDisposedException(ToString());
179179
}
@@ -718,10 +718,8 @@ public void EmbedHostType(string itemName, Type type)
718718
/// </summary>
719719
public void Dispose()
720720
{
721-
if (!_disposed)
721+
if (_disposedFlag.Set())
722722
{
723-
_disposed = true;
724-
725723
if (_jsEngine != null)
726724
{
727725
_jsEngine.Dispose();

0 commit comments

Comments
 (0)