dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.21k stars 4.72k forks source link

[mono] Remove async abort logic #50656

Open CoffeeFlux opened 3 years ago

CoffeeFlux commented 3 years ago

This should all be functionally dead code on netcore, and is now decoupled from interruptions.

cc: @lambdageek

lambdageek commented 3 years ago

We discussed on Discord and the theory is that INTERRUPT_ASYNC_REQUESTED_BIT is never set anymore (except from abort protection blocks via ves_icall_thread_finish_async_abort) because mono_thread_set_interruption_requested_flags is never passed sync == FALSE. And the ves_icall_thread_finish_async_abort icall should be dead code because there should not be async aborts anymore.

And interruptions are now done in managed via https://github.com/dotnet/runtime/blob/c11604786a85488909ec730ac61641bf4f612332/src/libraries/System.Private.CoreLib/src/System/Threading/WaitSubsystem.ThreadWaitInfo.Unix.cs#L78

So the only thing we need to preserve in native is self-interruptions (and self-aborts? do those work still?) which we use for mono_set_pending_exception.