void fluke_thread_get_state(fluke_thread_t *thread, fluke_thread_state *state, fluke_ref_t *task_ref, fluke_ref_t *scheduler_ref, fluke_ref_t *waiting_for_ref, fluke_ref_t *client_ref, fluke_ref_t *server_ref);
This operation retrieves the application-visible state of a thread. The target thread will be stopped before its state is gathered and will remain stopped until fluke_thread_set_state is called with the FLUKE_THREAD_STOPPED bit cleared. There is no guarantee on how quickly a running target thread will be stopped, only that it will be stopped when this call completes.
- thread
- The thread whose state is to be retrieved.
- state
- If non-null, the structure to fill in with the simple (non-reference) thread state.
- task_ref
- If non-null, the address of a reference object to associate with the thread's task object.
- scheduler_ref
- If non-null, the address of a reference object to associate with the thread's scheduler port object.
- waiting_for_ref
- If non-null, the address of a reference object to associate with the object the thread is currently waiting for.
- client_ref
- If non-null, the address of a reference object to associate with the thread's client thread object.
- server_ref
- If non-null, the address of a reference object to associate with the thread's server thread object.
If any of the following errors is detected by the Fluke implementation, it causes the current thread to take a synchronous exception with one of the following codes. All of these have an implicit FLUKE_INSANITY_ prefix.
- NO_OBJECT
- thread does not point to an active object.
- NOT_THREAD
- The object pointed to by thread is not a thread object.
- INVALID_OBJECT
- The state of the thread object or one of the reference objects has become invalid.
- NOT_REF
- One or more of the reference object parameters was not a pointer to a reference object.
- RACE_CONDITION
- An illegal race condition with another thread was detected on one of the objects specified as parameters to this call.
- CURRENT_THREAD
- A thread attempted to get its own state.
fluke_thread_set_state