Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono-addins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <llsan@microsoft.com>2022-06-16 14:17:04 +0300
committerLluis Sanchez <llsan@microsoft.com>2022-09-13 20:38:42 +0300
commit02395022e0116c66e7c9c02f23fd4452a71f9c3d (patch)
tree2d27029b0ba4e3aa910730c3ffc4224813226c45
parent9ac75d4641bb7b58075c9d6fc8ac92dbb32a4fbf (diff)
Really lock AddinDatabase when starting a transaction
-rw-r--r--Mono.Addins/Mono.Addins.Database/AddinDatabase.cs30
1 files changed, 21 insertions, 9 deletions
diff --git a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
index 938ad8a..0043774 100644
--- a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
+++ b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs
@@ -33,6 +33,7 @@ using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
+using System.Threading;
using Mono.Addins.Description;
namespace Mono.Addins.Database
@@ -76,7 +77,7 @@ namespace Mono.Addins.Database
public AddinDatabaseTransaction BeginTransaction ()
{
- return new AddinDatabaseTransaction ();
+ return new AddinDatabaseTransaction (this, localLock);
}
string AddinDbDir {
@@ -2010,15 +2011,26 @@ namespace Mono.Addins.Database
}
}
- class AddinDatabaseTransaction : IDisposable
- {
- public void Dispose ()
- {
- }
- }
+ class AddinDatabaseTransaction : IDisposable
+ {
+ readonly AddinDatabase addinDatabase;
+ readonly object localLock;
+
+ public AddinDatabaseTransaction (AddinDatabase addinDatabase, object localLock)
+ {
+ this.addinDatabase = addinDatabase;
+ this.localLock = localLock;
+ Monitor.Enter (localLock);
+ }
+
+ public void Dispose ()
+ {
+ Monitor.Exit (localLock);
+ }
+ }
- // Keep in sync with AddinSearchFlags
- [Flags]
+ // Keep in sync with AddinSearchFlags
+ [Flags]
enum AddinSearchFlagsInternal
{
IncludeAddins = 1,