From 02395022e0116c66e7c9c02f23fd4452a71f9c3d Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Date: Thu, 16 Jun 2022 13:17:04 +0200 Subject: Really lock AddinDatabase when starting a transaction --- Mono.Addins/Mono.Addins.Database/AddinDatabase.cs | 30 ++++++++++++++++------- 1 file 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, -- cgit v1.2.3