diff --git a/IPA.Loader/Loader/StateTransitionTransaction.cs b/IPA.Loader/Loader/StateTransitionTransaction.cs index 16263863..7d0a6a4c 100644 --- a/IPA.Loader/Loader/StateTransitionTransaction.cs +++ b/IPA.Loader/Loader/StateTransitionTransaction.cs @@ -216,6 +216,11 @@ namespace IPA.Loader /// /// If you are running in a coroutine, you can use instead of . /// + /// + /// If you are running on the Unity main thread, this will block until all enabling is done, and will return a task representing the disables. + /// Otherwise, the task returned represents both, and will not complete until Unity has done (possibly) several updates, depending on + /// the number of plugins being disabled, and the time they take. + /// /// /// a which completes whenever all disables complete /// if this object has been disposed diff --git a/Net3-Proxy/CompilerServices.cs b/Net3-Proxy/CompilerServices.cs index f37a0787..a827fd37 100644 --- a/Net3-Proxy/CompilerServices.cs +++ b/Net3-Proxy/CompilerServices.cs @@ -35,7 +35,9 @@ namespace System.Runtime.CompilerServices } public void Add(TKey key, TValue value) - { + { + if (key == null) + throw new ArgumentException("Null key", nameof(key)); lock (_lock) items.Add(WeakRef(key), value); } @@ -73,8 +75,13 @@ namespace System.Runtime.CompilerServices public TValue GetOrCreateValue(TKey key) => GetValue(key, k => Activator.CreateInstance()); - public bool Remove(TKey key) - => items.Remove(WeakRef(key)); + public bool Remove(TKey key) + { + if (key == null) + throw new ArgumentException("Null key", nameof(key)); + + items.Remove(WeakRef(key)); + } public ConditionalWeakTable() => GCTracker.OnGC += OnGC;