Age | Commit message (Collapse) | Author |
|
Update provisionator-bootstrap.sh
|
|
|
|
Update TSA options
|
|
|
|
|
|
Enable CodeQL with TSA
|
|
Fix nested event dispatch issue
|
|
Try to fix flaky test
|
|
|
|
Event handler invocations are done through a dispatch queue, to ensure that
they are dispatched in the right order in multi-threading scenarios.
The dispatch queue is also used when invoking a handler as a result of
an event subscription. For example, when calling AddExtensionNodeHandler,
the handler should be immediately invoked for all existing nodes in the provided
extension path. However, if AddExtensionNodeHandler was invoked within an
event handler, those invocations would be queued and not executed immediately
as the caller would expect.
The solution is to do the handler invocation for existing nodes like it used
to be, not through the queue. However, the actual event subscription still
needs to be done through the queue, to avoid receiving unnecessary events.
There is a more complete explanation in the code.
|
|
|
|
Fixed several exceptions that happen when unloading nodes
|
|
|
|
|
|
When registering an add-in for uninstall, the list of add-in's files was not stored.
|
|
|
|
|
|
Moved notification queue from ExtensionContext to to add-in engine. The problem
was that when a node is removed, it is not bound to a context anymore, but it
may still need to make use of the event queue.
|
|
Fix NRE when unloading an add-in
|
|
|
|
|
|
When removing many nodes in a transaction it may happen that a parent
is removed before its children, since the list of nodes to remove is
in a hashset, so there is no defined order. Added a null check to avoid
a crash when that happens.
|
|
Update and rename README to README.md
|
|
|
|
Thread safety deserves a minor version bump
|
|
|
|
Make mono.addins thread safe
|
|
|
|
Update to Newtonsoft.Json 13.0.1
|
|
By default Microsoft.Net.Test.Sdk bring in Newtonsoft 9.0.1, but that has a vulnerbility to fix, so explicitly references the updated Newtonsoft with the fix, 13.0.1
|
|
Use Environment.SpecialFolder.UserProfile instead of Personal
|
|
Mono and .NET, before .NET 8, would resolve the
System.Environment.SpecialFolder.Personal enum value to the $HOME
directory. In .NET 8 this is changing. The Personal folder will now
refer to $XDG_DOCUMENTS_DIR if set or $HOME/Documents otherwise.
Replace all uses of Environment.SpecialFolder.Personal with
Environment.SpecialFolder.UserProfile so the code behaves as it did
before. UserProfile still maps to $HOME
dotnet/runtime#68610
|
|
Fix add-in downgrade issue
|
|
|
|
In some cases when add-ins are downgraded the add-in database may be left in
an invalid status. This happened because the add-in scanner did not properly
compare the versions of the old and the new add-in, so it did not uninstall
the old add-in when versions were different. This resulted on the old and
new descriptions of the add-in to be kept in the database, and it might
generate add-in dependency errors.
This also happened when upgrading, but since the engine always loads
add-ins with the highest version it doesn't matter if there is one with
lower version also registered.
The solution is to cache information about the old add-in version, and when
comparing ids, use that information.
Added unit tests.
|
|
|
|
Fix unit tests and run them in CI
|
|
|
|
|
|
Make sure the test repo dir is cleaned for every test run.
|
|
|
|
|
|
|
|
Split the context transaction class in two classes, one for extension context and one
for add-in engine (which is a context by itself). In this was there is no danger of
providing a context transaction to an add-in engine method and expect it to work.
Added method for stating an engine transaction from a context transaction.
Fixes tests.
|
|
Reduce the number of transactions being created by propagating them.
Created a transaction when the engine is initialized, so that the initial
loading of add-in roots is all done using a single transaction.
Fixed unit tests.
|
|
Store extension content data in a snapshot class, so that it is possible
to swap it all at once when committing a transaction.
Propagate transactions to more methods.
Events and virtual methods are now guaranteed to be executed sequentially,
and never concurrently.
Add threading docs.
|
|
|
|
|
|
|
|
And fixed threading issue.
|