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:
-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,