thread: add spdk_thread_is_running()

This function can be useful to query if a thread
had spdk_thread_exit() called on it yet.  Internally
we have both EXITING and EXITED state - so
!spdk_thread_is_running() can be used to detect a
thread that is in either of those states.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: I2f6fb024a6b1bc895fdc5132c722abc10f5d30f9
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15512
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
This commit is contained in:
Jim Harris 2022-11-17 06:10:53 +00:00 committed by Tomasz Zawadzki
parent 98ceddb47c
commit 8203e68e24
4 changed files with 26 additions and 0 deletions

View File

@ -70,6 +70,9 @@ for writing and decoding of the the double data type.
Added `spdk_thread_get_app_thread` which returns the first thread that was created using
`spdk_thread_create`.
Added `spdk_thread_is_running`. This returns `true` for a running thread, or `false` if
its exit process has started using `spdk_thread_exit`.
## v22.09
### accel

View File

@ -285,12 +285,28 @@ int spdk_thread_exit(struct spdk_thread *thread);
/**
* Returns whether the thread is marked as exited.
*
* A thread is exited only after it has spdk_thread_exit() called on it, and
* it has been polled until any outstanding operations targeting this
* thread have completed. This may include poller unregistrations, io channel
* unregistrations, or outstanding spdk_thread_send_msg calls.
*
* \param thread The thread to query.
*
* \return true if marked as exited, false otherwise.
*/
bool spdk_thread_is_exited(struct spdk_thread *thread);
/**
* Returns whether the thread is still running.
*
* A thread is considered running until it has * spdk_thread_exit() called on it.
*
* \param thread The thread to query.
*
* \return true if still running, false otherwise.
*/
bool spdk_thread_is_running(struct spdk_thread *thread);
/**
* Destroy a thread, releasing all of its resources. May only be called
* on a thread previously marked as exited.

View File

@ -9,6 +9,7 @@
spdk_thread_get_app_thread;
spdk_set_thread;
spdk_thread_exit;
spdk_thread_is_running;
spdk_thread_is_exited;
spdk_thread_destroy;
spdk_thread_get_ctx;

View File

@ -594,6 +594,12 @@ spdk_thread_exit(struct spdk_thread *thread)
return 0;
}
bool
spdk_thread_is_running(struct spdk_thread *thread)
{
return thread->state == SPDK_THREAD_STATE_RUNNING;
}
bool
spdk_thread_is_exited(struct spdk_thread *thread)
{