From 84f9b303d7df354d83ca14a56fedafd67f3116b8 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sun, 20 May 2007 19:37:50 +0000 Subject: [PATCH] updates. --- TODO | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 9a715bf0..6a1e9923 100644 --- a/TODO +++ b/TODO @@ -150,6 +150,56 @@ Runtime library, lib/silcutil/ o SilcStack aware SilcDList. + o Thread pool API. + + typedef void (*SilcThreadPoolFunc)(SilcSchedule schedule, + void *context); + + /* 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 start `min_threads' many threads immediately. */ + SilcThreadPool silc_thread_pool_alloc(SilcStack stack, + SilcUInt32 min_threads, + SilcUInt32 max_threads, + SilcBool start_min_threads); + + /* Free thread pool. If `wait_unfinished' is TRUE this will block + and waits that all remaining active threads finish before freeing + the pool. */ + void silc_thread_pool_free(SilcThreadPool tp, SilcBool wait_unfinished); + + /* Run `run' function with `run_context' in one of the threads in the + thread pool. Returns FALSE if the thread pool is being freed. If + there are no free threads left in the pool this will queue the + the `run' and will call it once a thread becomes free. + + If `completion' is non-NULL it will be called to indicate completion + of the `run' function. If `schedule' is non-NULL the `completion' + will be called through the scheduler in the main thread. If it is + NULL the `completion' is called directly from the thread after the + `run' has returned. */ + SilcBool silc_thread_pool_run(SilcThreadPool tp, + SilcSchedule schedule, + SilcThreadPoolFunc run, + void *run_context, + SilcThreadPoolFunc completion, + void *completion_context); + + /* Modify the amount of maximum threads of the pool. */ + void silc_thread_pool_set_max_threads(SilcThreadPool tp, + SilcUInt32 max_threads); + + /* Returns the amount of maximum size the pool can grow. */ + SilcUInt32 silc_thread_pool_get_max_threads(SilcThreadPool tp); + + /* Returns the amount of free threads in the pool currently. */ + SilcUInt32 silc_thread_pool_get_free_threads(SilcThreadPool tp); + + /* Stops all free and started threads. The minumum amount of threads + specified to silc_thread_pool_alloc always remains. */ + void silc_thread_pool_stop_free_threads(SilcThreadPool tp); + o Compression routines are missing. The protocol supports packet compression thus it must be implemented. SILC Zip API must be defined. @@ -159,8 +209,6 @@ Runtime library, lib/silcutil/ protocol related status (currently in silcstatus.h) cannot be in runtime library) maybe - (o Thread pool) maybe - (o SILC specific socket creation/closing routines to silcnet.h, wrappers to all send(), recv(), sendto() etc. Bad thing is that we'd have to define all socket options, sockaddrs, etc.) maybe -- 2.24.0