timcassell / ProtoPromise

Robust and efficient library for management of asynchronous operations in C#/.Net.
MIT License
153 stars 13 forks source link

Cancelation race condition #271

Closed timcassell closed 1 year ago

timcassell commented 1 year ago

https://github.com/timcassell/ProtoPromise/runs/17025715785

System.Exception : No message provided
  ----> System.Exception : Object is in pool: Proto.Promises.Internal+CancelationRef
   at ProtoPromiseTests.Concurrency.ThreadHelper.ExecutePendingParallelActions(TimeSpan timeoutPerAction) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Tests/Helpers/ThreadHelper.cs:line 190
   at ProtoPromiseTests.Concurrency.ThreadHelper.ExecuteParallelActions(Int32 repeatCount, Action setup, Action teardown, Action[] actions) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Tests/Helpers/ThreadHelper.cs:line 228
   at ProtoPromiseTests.Concurrency.CancelationConcurrencyTests.CancelationMegaConcurrencyTest() in /home/runner/work/ProtoPromise/ProtoPromise/Package/Tests/CoreTests/Concurrency/CancelationConcurrencyTests.cs:line 1159
--Exception
   at Proto.Promises.Internal.ThrowIfInPool(Object obj) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Core/InternalShared/PoolInternal.cs:line 236
   at Proto.Promises.Internal.CancelationRef.TryRegister[TNodeCreator](TNodeCreator& nodeCreator, Int32 tokenId) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Core/Cancelations/Internal/CancelationInternal.cs:line 337
   at Proto.Promises.Internal.CancelationRef.TryRegister[TCancelable](TCancelable& cancelable, Int32 tokenId, CancelationRegistration& registration) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Core/Cancelations/Internal/CancelationInternal.cs:line 321
   at Proto.Promises.Internal.CancelationRef.TryRegister[TCancelable](CancelationRef _this, Int32 tokenId, TCancelable& cancelable, CancelationRegistration& registration) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Core/Cancelations/Internal/CancelationInternal.cs:line 310
   at Proto.Promises.CancelationToken.TryRegister(Action callback, CancelationRegistration& cancelationRegistration) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Core/Cancelations/CancelationToken.cs:line 113
   at Proto.Promises.CancelationToken.Register(Action callback) in /home/runner/work/ProtoPromise/ProtoPromise/Package/Core/Cancelations/CancelationToken.cs:line 152
   at ProtoPromiseTests.Concurrency.CancelationConcurrencyTests.<>c__DisplayClass44_0.<CancelationMegaConcurrencyTest>b__12() in /home/runner/work/ProtoPromise/ProtoPromise/Package/Tests/CoreTests/Concurrency/CancelationConcurrencyTests.cs:line 1190
   at ProtoPromiseTests.Concurrency.ThreadHelper.ThreadRunner.Execute() in /home/runner/work/ProtoPromise/ProtoPromise/Package/Tests/Helpers/ThreadHelper.cs:line 71