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-10-27 14:07:30 +0300
committerGitHub <noreply@github.com>2022-10-27 14:07:30 +0300
commitee62ae03ad9571f44cb69f50380219b6524672cf (patch)
tree45fc774082fdde5daf67bf0f6510a7d0700f6279
parent9eaab025099bc82c0fc31379afa95786aa7fcdfa (diff)
parent3752481f197aae34e4f6aa837743ef4597581793 (diff)
Merge pull request #197 from mono/dev/lluis/fix-notification-nre
Fix NRE when unloading an add-in
-rw-r--r--Mono.Addins/Mono.Addins/ExtensionContextTransaction.cs4
-rw-r--r--Test/FileContentExtension/FileContentExtension.addin.xml27
-rw-r--r--Test/UnitTests/SimpleApp.addin.xml4
-rw-r--r--Test/UnitTests/TestEvents.cs8
-rw-r--r--Test/UnitTests/TestMultithreading.cs8
-rw-r--r--Version.props2
6 files changed, 48 insertions, 5 deletions
diff --git a/Mono.Addins/Mono.Addins/ExtensionContextTransaction.cs b/Mono.Addins/Mono.Addins/ExtensionContextTransaction.cs
index ba2a245..99cba20 100644
--- a/Mono.Addins/Mono.Addins/ExtensionContextTransaction.cs
+++ b/Mono.Addins/Mono.Addins/ExtensionContextTransaction.cs
@@ -165,7 +165,9 @@ namespace Mono.Addins
{
foreach (var node in childrenChanged)
{
- if (node.NotifyChildrenChanged())
+ // It may happen that a node is removed while updating its parent. In this case the parent
+ // will be set to null, and then there is no need to notify changes
+ if (node.Parent != null && node.NotifyChildrenChanged())
NotifyExtensionsChangedEvent(node.GetPath());
}
}
diff --git a/Test/FileContentExtension/FileContentExtension.addin.xml b/Test/FileContentExtension/FileContentExtension.addin.xml
index b3f1144..6675368 100644
--- a/Test/FileContentExtension/FileContentExtension.addin.xml
+++ b/Test/FileContentExtension/FileContentExtension.addin.xml
@@ -65,6 +65,33 @@
<Node id="n4" type="test" />
</Extension>
+ <Extension path="/SimpleApp/ItemTree">
+ <ItemSet label="i1">
+ <Item />
+ <ItemSet label="i2">
+ <Item />
+ <ItemSet label="i1">
+ <Item />
+ <ItemSet label="i2">
+ <Item />
+ <ItemSet label="i1">
+ <Item />
+ <ItemSet label="i2">
+ <Item />
+ <ItemSet label="i1">
+ <Item />
+ <ItemSet label="i2">
+ <Item />
+ </ItemSet>
+ </ItemSet>
+ </ItemSet>
+ </ItemSet>
+ </ItemSet>
+ </ItemSet>
+ </ItemSet>
+ </ItemSet>
+ </Extension>
+
<Module>
<Dependencies>
<Addin id="SystemInfoExtension" version="0.1.0" />
diff --git a/Test/UnitTests/SimpleApp.addin.xml b/Test/UnitTests/SimpleApp.addin.xml
index 7cf285c..86524f4 100644
--- a/Test/UnitTests/SimpleApp.addin.xml
+++ b/Test/UnitTests/SimpleApp.addin.xml
@@ -48,6 +48,10 @@
<ExtensionNode type="UnitTests.ItemSetNode" />
</ExtensionPoint>
+ <ExtensionPoint path = "/SimpleApp/ItemTree">
+ <ExtensionNode type="UnitTests.ItemSetNode" />
+ </ExtensionPoint>
+
<ExtensionPoint path = "/SimpleApp/NodeWithChildren">
<ExtensionNode name="Node">
<ExtensionNode name="Child" />
diff --git a/Test/UnitTests/TestEvents.cs b/Test/UnitTests/TestEvents.cs
index 2b6cd73..c0ca45a 100644
--- a/Test/UnitTests/TestEvents.cs
+++ b/Test/UnitTests/TestEvents.cs
@@ -171,6 +171,7 @@ namespace UnitTests
// All addins are enabled
Assert.AreEqual (4, AddinManager.GetExtensionNodes ("/SimpleApp/Writers").Count, "count 1");
+ AddinManager.GetExtensionNodes ("/SimpleApp/ItemTree");
string[] addinExtensions = new string[] {
"/SimpleApp/Writers",
@@ -178,7 +179,7 @@ namespace UnitTests
"/SimpleApp.Core/TypeExtensions/SimpleApp.ISampleExtender",
"/SimpleApp.Core/TypeExtensions/SimpleApp.IWriterWithMetadata",
"/SimpleApp/NodesWithAttribute",
- "/SimpleApp/DataExtensionWithAttribute",
+ "/SimpleApp/DataExtensionWithAttribute"
};
InitChangedExtensionEvent (addinExtensions);
@@ -209,7 +210,8 @@ namespace UnitTests
"/SimpleApp/NodeWithChildren",
"/SystemInformation/Modules",
"/SimpleApp/DefaultInsertAfter",
- "/SimpleApp/DefaultInsertBefore");
+ "/SimpleApp/DefaultInsertBefore",
+ "/SimpleApp/ItemTree");
notifyCount = addCount = removeCount = eventCount = 0;
AddinManager.Registry.DisableAddin ("SimpleApp.FileContentExtension,0.1.0");
@@ -220,7 +222,7 @@ namespace UnitTests
Assert.AreEqual (1, notifyCount, "notifyCount 3");
Assert.AreEqual (0, addCount, "addCount 3");
Assert.AreEqual (1, removeCount, "removeCount 3");
- Assert.AreEqual (6, eventCount, "eventCount 3");
+ Assert.AreEqual (7, eventCount, "eventCount 3");
// Now unregister
diff --git a/Test/UnitTests/TestMultithreading.cs b/Test/UnitTests/TestMultithreading.cs
index 646cdef..64a560a 100644
--- a/Test/UnitTests/TestMultithreading.cs
+++ b/Test/UnitTests/TestMultithreading.cs
@@ -7,6 +7,7 @@ using SimpleApp;
using System.Threading;
using System.Diagnostics;
using System.Linq;
+using System.Collections.Generic;
namespace UnitTests
{
@@ -62,6 +63,7 @@ namespace UnitTests
testData.StartThreads ((index, data) => {
while (!data.Stopped) {
+ LoadAll(AddinManager.GetExtensionNodes<ItemSetNode>("/SimpleApp/ItemTree"));
var writers = AddinManager.GetExtensionObjects<IWriter> ("/SimpleApp/Writers");
testData.Counters [index] = writers.Length;
}
@@ -87,6 +89,12 @@ namespace UnitTests
}
}
+ void LoadAll(IEnumerable<ExtensionNode> nodes)
+ {
+ foreach (var n in nodes.OfType<ItemSetNode>())
+ LoadAll(n.GetChildNodes());
+ }
+
[Test]
public void EventsMultithread()
{
diff --git a/Version.props b/Version.props
index 1f5e3c5..d6968ef 100644
--- a/Version.props
+++ b/Version.props
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
- <PackageVersion>1.4</PackageVersion>
+ <PackageVersion>1.4.1</PackageVersion>
<Authors>Microsoft</Authors>
<Owners>microsoft, xamarin</Owners>
<PackageLicenseUrl>https://github.com/mono/mono-addins/blob/main/COPYING</PackageLicenseUrl>