X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcthread.h;h=5afc0a03201cced36b4b3cd48fd75fcb81c830b8;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hp=2a7888049341147d3bfdb85a7849cf35efcf8665;hpb=da102216367c1d997f60755357d759e03f87940a;p=silc.git diff --git a/lib/silcutil/silcthread.h b/lib/silcutil/silcthread.h index 2a788804..5afc0a03 100644 --- a/lib/silcutil/silcthread.h +++ b/lib/silcutil/silcthread.h @@ -30,6 +30,9 @@ * in the threads. The thread pool manages the threads creation and * destruction. * + * The interface also provides routines for accessing the Thread-local + * storage (Tls) on all supported platforms. + * ***/ #ifndef SILCTHREAD_H @@ -195,8 +198,8 @@ typedef struct SilcThreadPoolStruct *SilcThreadPool; * * A callback function of this type is given as argument to the * silc_thread_pool_run. The `schedule' is the scheduler and the - * `context' is the `run_context' or `completion_context' given as - * argument to silc_thread_pool_run. + * `context' is the `run_context' given as argument to + * silc_thread_pool_run. * ***/ typedef void (*SilcThreadPoolFunc)(SilcSchedule schedule, void *context); @@ -213,10 +216,11 @@ typedef void (*SilcThreadPoolFunc)(SilcSchedule schedule, void *context); * DESCRIPTION * * Allocate thread pool with at least `min_threads' and at most - * `max_threads' many threads. If `stack' is non-NULL all memory is - * allocated from the `stack'. If `start_min_threads' is TRUE this will + * `max_threads' many threads. If `start_min_threads' is TRUE this will * start `min_threads' many threads immediately. Returns the thread - * pool context or NULL on error. + * pool context or NULL on error. If `stack' is non-NULL memory is + * allocated from `stack'. When the thread pool is freed the memory + * is returned to `stack'. * * EXAMPLE * @@ -263,7 +267,7 @@ void silc_thread_pool_free(SilcThreadPool tp, SilcBool wait_unfinished); * SilcSchedule schedule, * SilcThreadPoolFunc run, * void *run_context, - * SilcThreadPoolFunc completion, + * SilcTaskCallback completion, * void *completion_context); * * DESCRIPTION @@ -287,7 +291,7 @@ SilcBool silc_thread_pool_run(SilcThreadPool tp, SilcSchedule schedule, SilcThreadPoolFunc run, void *run_context, - SilcThreadPoolFunc completion, + SilcTaskCallback completion, void *completion_context); /****f* silcutil/SilcThreadAPI/silc_thread_pool_set_max_threads @@ -306,18 +310,18 @@ SilcBool silc_thread_pool_run(SilcThreadPool tp, void silc_thread_pool_set_max_threads(SilcThreadPool tp, SilcUInt32 max_threads); -/****f* silcutil/SilcThreadAPI/silc_thread_pool_num_max_threads +/****f* silcutil/SilcThreadAPI/silc_thread_pool_get_max_threads * * SYNOPSIS * - * SilcUInt32 silc_thread_pool_num_max_threads(SilcThreadPool tp); + * SilcUInt32 silc_thread_pool_get_max_threads(SilcThreadPool tp); * * DESCRIPTION * * Returns the number of maximum threads to which the pool can grow. * ***/ -SilcUInt32 silc_thread_pool_num_max_threads(SilcThreadPool tp); +SilcUInt32 silc_thread_pool_get_max_threads(SilcThreadPool tp); /****f* silcutil/SilcThreadAPI/silc_thread_pool_num_free_threads * @@ -348,4 +352,38 @@ SilcUInt32 silc_thread_pool_num_free_threads(SilcThreadPool tp); ***/ void silc_thread_pool_purge(SilcThreadPool tp); +/****f* silcutil/SilcThreadAPI/silc_thread_tls_set + * + * SYNOPSIS + * + * void silc_thread_tls_set(void *context); + * + * DESCRIPTION + * + * Sets `context' into the Thread-local storage. Any previously set + * value will be replaced. This function may be called for the main + * thread also. This function may be called also if the program does + * not support threads. + * + * To retrieve the context from the Tls, call silc_thread_tls_get. + * + ***/ +void silc_thread_tls_set(void *context); + +/****f* silcutil/SilcThreadAPI/silc_thread_tls_get + * + * SYNOPSIS + * + * void *silc_thread_tls_get(void); + * + * DESCRIPTION + * + * Returns context from the Thread-local storage. If context has no been + * set for the current thread NULL will be returned. + * + ***/ +void *silc_thread_tls_get(void); + +#include "silcthread_i.h" + #endif