Function rte_ctrl_thread_create has been replaced by rte_thread_create_control, encouraging Linux users to switch from the pthread_t API to the rte_thread API. However the rte_thread API does not provide wrappers for all pthread functions. This commit introduces equivalent functions for pthread_timedjoin_np, pthread_getname_np and pthread_cancel.
Bugzilla ID: 1330 --- lib/eal/include/rte_thread.h | 49 ++++++++++++++++++++++++++++++++++++ lib/eal/unix/rte_thread.c | 20 +++++++++++++++ lib/eal/version.map | 3 +++ 3 files changed, 72 insertions(+) diff --git a/lib/eal/include/rte_thread.h b/lib/eal/include/rte_thread.h index 8da9d4d3fb..49a068eda7 100644 --- a/lib/eal/include/rte_thread.h +++ b/lib/eal/include/rte_thread.h @@ -463,6 +463,55 @@ int rte_thread_value_set(rte_thread_key key, const void *value); */ void *rte_thread_value_get(rte_thread_key key); +/** + * Try to join with a terminated thread. If thread has not yet terminated, + * then the call blocks until a maximum time, specified in abstime. + * + * @param thread_id + * Id of the thread. + * + * @param retval + * Exit status of the thread. + * + * @param abstime + * Maximum time of call blocking, measured against the CLOCK_REALTIME clock. + * + * @return + * On success, return 0. + * On failure, return a positive errno-style error number. + */ +int rte_thread_timedjoin_np(rte_thread_t thread_id, void **retval, const struct timespec *abstime); + +/** + * Get name of the thread. + * + * @param thread_id + * Id of the thread. + * + * @param name + * Name of the thread. + * + * @param size + * The number of bytes available in name. + * + * @return + * On success, return 0. + * On failure, return a positive errno-style error number. + */ +int rte_thread_getname_np(rte_thread_t thread_id, char name[], size_t size); + +/** + * Send a cancelation request to a thread. + * + * @param thread_id + * Id of the thread. + * + * @return + * On success, return 0. + * On failure, return a positive errno-style error number. + */ +int rte_thread_cancel(rte_thread_t thread_id); + #ifdef __cplusplus } #endif diff --git a/lib/eal/unix/rte_thread.c b/lib/eal/unix/rte_thread.c index 36a21ab2f9..79986bee6a 100644 --- a/lib/eal/unix/rte_thread.c +++ b/lib/eal/unix/rte_thread.c @@ -378,3 +378,23 @@ rte_thread_get_affinity_by_id(rte_thread_t thread_id, return pthread_getaffinity_np((pthread_t)thread_id.opaque_id, sizeof(*cpuset), cpuset); } + +int +rte_thread_timedjoin_np(rte_thread_t thread_id, void **retval, + const struct timespec *abstime) +{ + return pthread_timedjoin_np((pthread_t) thread_id.opaque_id, retval, + abstime); +} + +int +rte_thread_getname_np(rte_thread_t thread_id, char name[], size_t size) +{ + return pthread_getname_np((pthread_t) thread_id.opaque_id, name, size); +} + +int +rte_thread_cancel(rte_thread_t thread_id) +{ + return pthread_cancel((pthread_t) thread_id.opaque_id); +} diff --git a/lib/eal/version.map b/lib/eal/version.map index 5e0cd47c82..66ac45b7de 100644 --- a/lib/eal/version.map +++ b/lib/eal/version.map @@ -310,6 +310,9 @@ DPDK_24 { rte_thread_unregister; rte_thread_value_get; rte_thread_value_set; + rte_thread_timedjoin_np; # WINDOWS_NO_EXPORT + rte_thread_getname_np; # WINDOWS_NO_EXPORT + rte_thread_cancel; # WINDOWS_NO_EXPORT rte_uuid_compare; rte_uuid_is_null; rte_uuid_parse; -- 2.43.0