updates.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 20 May 2007 19:37:50 +0000 (19:37 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 20 May 2007 19:37:50 +0000 (19:37 +0000)
TODO

diff --git a/TODO b/TODO
index 9a715bf0d8bd6f25fd75ce17d35527c147e5c1a9..6a1e9923b485d46aa6d76645886bec7726cfb1ae 100644 (file)
--- 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