-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[embedding] Chaining Mach exceptions to Mono signals using utility threads #18011
Milestone
Comments
lambdageek
added a commit
to lambdageek/mono
that referenced
this issue
Dec 4, 2019
In mono@a5da7b2 we got rid of "tools" threads internally to the runtime. However since the API was previously marked with MONO_API it was an internal API that some embedders depended on. This PR adds back an (external-only) limited form of tools thread. The runtime is aware of the Tools thread in that FOREACH_THREAD_* macros will iterate over them, and the thread has a coop thread state machine. (That is, mono_thread_info_current() and GC Safe and GC Unsafe transitions all work.) However the thread is: 1. Not stopped by the GC 2. Is not interrupted by profiler sampling. 3. Does not have a "current domain" 4. (As a consequence of the above) cannot call managed methods or touch managed objects. Such threads are useful for low-level interaction with the runtime such as querying metadata, the JIT state and other coordination. mono_threads_attach_tools_thread should be called no more than once. It should not be called on a thread that is already attached with mono_thread_atach, and vice versa. Addresses mono#18011
monojenkins
pushed a commit
to monojenkins/mono
that referenced
this issue
Dec 6, 2019
In mono@a5da7b2 we got rid of "tools" threads internally to the runtime. However since the API was previously marked with MONO_API it was an internal API that some embedders depended on. This PR adds back an (external-only) limited form of tools thread. The runtime is aware of the Tools thread in that FOREACH_THREAD_* macros will iterate over them, and the thread has a coop thread state machine. (That is, mono_thread_info_current() and GC Safe and GC Unsafe transitions all work.) However the thread is: 1. Not stopped by the GC 2. Is not interrupted by profiler sampling. 3. Does not have a "current domain" 4. (As a consequence of the above) cannot call managed methods or touch managed objects. Such threads are useful for low-level interaction with the runtime such as querying metadata, the JIT state and other coordination. mono_threads_attach_tools_thread should be called no more than once. It should not be called on a thread that is already attached with mono_thread_atach, and vice versa. Addresses mono#18011
monojenkins
pushed a commit
to monojenkins/mono
that referenced
this issue
Dec 6, 2019
In mono@a5da7b2 we got rid of "tools" threads internally to the runtime. However since the API was previously marked with MONO_API it was an internal API that some embedders depended on. This PR adds back an (external-only) limited form of tools thread. The runtime is aware of the Tools thread in that FOREACH_THREAD_* macros will iterate over them, and the thread has a coop thread state machine. (That is, mono_thread_info_current() and GC Safe and GC Unsafe transitions all work.) However the thread is: 1. Not stopped by the GC 2. Is not interrupted by profiler sampling. 3. Does not have a "current domain" 4. (As a consequence of the above) cannot call managed methods or touch managed objects. Such threads are useful for low-level interaction with the runtime such as querying metadata, the JIT state and other coordination. mono_threads_attach_tools_thread should be called no more than once. It should not be called on a thread that is already attached with mono_thread_atach, and vice versa. Addresses mono#18011
This was referenced Dec 6, 2019
lambdageek
added a commit
that referenced
this issue
Dec 6, 2019
…18048) * [utils] Add back mono_threads_attach_tools_thread In a5da7b2 we got rid of "tools" threads internally to the runtime. However since the API was previously marked with MONO_API it was an internal API that some embedders depended on. This PR adds back an (external-only) limited form of tools thread. The runtime is aware of the Tools thread in that FOREACH_THREAD_* macros will iterate over them, and the thread has a coop thread state machine. (That is, mono_thread_info_current() and GC Safe and GC Unsafe transitions all work.) However the thread is: 1. Not stopped by the GC 2. Is not interrupted by profiler sampling. 3. Does not have a "current domain" 4. (As a consequence of the above) cannot call managed methods or touch managed objects. Such threads are useful for low-level interaction with the runtime such as querying metadata, the JIT state and other coordination. mono_threads_attach_tools_thread should be called no more than once. It should not be called on a thread that is already attached with mono_thread_atach, and vice versa. Addresses #18011 * [threads] Make mono_threads_attach_tools_thread into a public API
lambdageek
pushed a commit
that referenced
this issue
Dec 6, 2019
…blic API (#18075) * [utils] Add back mono_threads_attach_tools_thread In a5da7b2 we got rid of "tools" threads internally to the runtime. However since the API was previously marked with MONO_API it was an internal API that some embedders depended on. This PR adds back an (external-only) limited form of tools thread. The runtime is aware of the Tools thread in that FOREACH_THREAD_* macros will iterate over them, and the thread has a coop thread state machine. (That is, mono_thread_info_current() and GC Safe and GC Unsafe transitions all work.) However the thread is: 1. Not stopped by the GC 2. Is not interrupted by profiler sampling. 3. Does not have a "current domain" 4. (As a consequence of the above) cannot call managed methods or touch managed objects. Such threads are useful for low-level interaction with the runtime such as querying metadata, the JIT state and other coordination. mono_threads_attach_tools_thread should be called no more than once. It should not be called on a thread that is already attached with mono_thread_atach, and vice versa. Addresses #18011 * [threads] Make mono_threads_attach_tools_thread into a public API
akoeplinger
pushed a commit
that referenced
this issue
Dec 9, 2019
…blic API (#18074) * [utils] Add back mono_threads_attach_tools_thread In a5da7b2 we got rid of "tools" threads internally to the runtime. However since the API was previously marked with MONO_API it was an internal API that some embedders depended on. This PR adds back an (external-only) limited form of tools thread. The runtime is aware of the Tools thread in that FOREACH_THREAD_* macros will iterate over them, and the thread has a coop thread state machine. (That is, mono_thread_info_current() and GC Safe and GC Unsafe transitions all work.) However the thread is: 1. Not stopped by the GC 2. Is not interrupted by profiler sampling. 3. Does not have a "current domain" 4. (As a consequence of the above) cannot call managed methods or touch managed objects. Such threads are useful for low-level interaction with the runtime such as querying metadata, the JIT state and other coordination. mono_threads_attach_tools_thread should be called no more than once. It should not be called on a thread that is already attached with mono_thread_atach, and vice versa. Addresses #18011 * [threads] Make mono_threads_attach_tools_thread into a public API
ManickaP
pushed a commit
to ManickaP/runtime
that referenced
this issue
Jan 20, 2020
…ono/mono#18048) * [utils] Add back mono_threads_attach_tools_thread In https://github.com/mono/mono/commit/mono/mono@a5da7b21f4b6dbc5eaa09c2addee91b84dc1dbd5 we got rid of "tools" threads internally to the runtime. However since the API was previously marked with MONO_API it was an internal API that some embedders depended on. This PR adds back an (external-only) limited form of tools thread. The runtime is aware of the Tools thread in that FOREACH_THREAD_* macros will iterate over them, and the thread has a coop thread state machine. (That is, mono_thread_info_current() and GC Safe and GC Unsafe transitions all work.) However the thread is: 1. Not stopped by the GC 2. Is not interrupted by profiler sampling. 3. Does not have a "current domain" 4. (As a consequence of the above) cannot call managed methods or touch managed objects. Such threads are useful for low-level interaction with the runtime such as querying metadata, the JIT state and other coordination. mono_threads_attach_tools_thread should be called no more than once. It should not be called on a thread that is already attached with mono_thread_atach, and vice versa. Addresses mono/mono#18011 * [threads] Make mono_threads_attach_tools_thread into a public API Commit migrated from mono/mono@3dabedd
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
See the README of https://github.com/lambdageek/mono-mach-exceptions
So the way the repo proposed to solve the issue was by creating a Mono tools thread that would listen on the Mach exception port and then dispatch the exception to the old listener (Which would raise a SEGV in Mono which would then try to raise a managed NRE if the thread was running some managed function).
In a5da7b2 we got rid of tools threads in favor of normal attach and using
mono_thread_info_set_flags
to exclude the thread from GC pauses and profiler signals.Not sure what the best approach is yet:
mono_threads_attach_tools_thread
and just have it set the thread info flags.The text was updated successfully, but these errors were encountered: