Skip to content

[2019-10] [threads] Add back mono_threads_attach_tools_thread as a public API#18075

Merged
lambdageek merged 2 commits intomono:2019-10from
monojenkins:backport-pr-18048-to-2019-10
Dec 6, 2019
Merged

[2019-10] [threads] Add back mono_threads_attach_tools_thread as a public API#18075
lambdageek merged 2 commits intomono:2019-10from
monojenkins:backport-pr-18048-to-2019-10

Conversation

@monojenkins
Copy link
Contributor

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

Backport of #18048.

/cc @lambdageek

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
@naricc
Copy link
Contributor

naricc commented Dec 6, 2019

How is it the author of this PR shows up as monojenkins?

@lambdageek
Copy link
Member

lambdageek commented Dec 6, 2019

It's a backport.

(Technically monojenkins isn't the author, it's the committer and the entity that opened the PR)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants