Skip to content

Commit dd253ed

Browse files
committed
Fix race condition (fixes #5)
1 parent 583e425 commit dd253ed

3 files changed

Lines changed: 6 additions & 4 deletions

File tree

ColorCode.Core/CodeColorizerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public abstract class CodeColorizerBase
1515
public CodeColorizerBase(StyleDictionary Styles, ILanguageParser languageParser)
1616
{
1717
this.languageParser = languageParser
18-
?? new LanguageParser(new LanguageCompiler(Languages.CompiledLanguages), Languages.LanguageRepository);
18+
?? new LanguageParser(new LanguageCompiler(Languages.CompiledLanguages, Languages.CompileLock), Languages.LanguageRepository);
1919

2020
this.Styles = Styles ?? StyleDictionary.DefaultLight;
2121
}

ColorCode.Core/Compilation/LanguageCompiler.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,10 @@ public class LanguageCompiler : ILanguageCompiler
1515
private readonly Dictionary<string, CompiledLanguage> compiledLanguages;
1616
private readonly ReaderWriterLockSlim compileLock;
1717

18-
public LanguageCompiler(Dictionary<string, CompiledLanguage> compiledLanguages)
18+
public LanguageCompiler(Dictionary<string, CompiledLanguage> compiledLanguages, ReaderWriterLockSlim compileLock)
1919
{
2020
this.compiledLanguages = compiledLanguages;
21-
22-
compileLock = new ReaderWriterLockSlim();
21+
this.compileLock = compileLock;
2322
}
2423

2524
public CompiledLanguage Compile(ILanguage language)

ColorCode.Core/Languages.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22

33
using System.Collections.Generic;
4+
using System.Threading;
45
using ColorCode.Common;
56
using ColorCode.Compilation;
67
using ColorCode.Compilation.Languages;
@@ -15,12 +16,14 @@ public static class Languages
1516
internal static readonly LanguageRepository LanguageRepository;
1617
internal static readonly Dictionary<string, ILanguage> LoadedLanguages;
1718
internal static Dictionary<string, CompiledLanguage> CompiledLanguages;
19+
internal static ReaderWriterLockSlim CompileLock;
1820

1921
static Languages()
2022
{
2123
LoadedLanguages = new Dictionary<string, ILanguage>();
2224
CompiledLanguages = new Dictionary<string, CompiledLanguage>();
2325
LanguageRepository = new LanguageRepository(LoadedLanguages);
26+
CompileLock = new ReaderWriterLockSlim();
2427

2528
Load<JavaScript>();
2629
Load<Html>();

0 commit comments

Comments
 (0)