diff options
author | Nick Mathewson <nickm@torproject.org> | 2013-09-23 01:19:16 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-01-14 10:56:24 -0500 |
commit | a82604b526a2a258e057d6d515ac17429eb6fb67 (patch) | |
tree | f42e29cb20db95b0cf5fa2abc0c59d56841da3e6 /src/common/workqueue.h | |
parent | 6c9363310aaea9d39fae4d9dd50e78d42c3598b3 (diff) | |
download | tor-a82604b526a2a258e057d6d515ac17429eb6fb67.tar.gz tor-a82604b526a2a258e057d6d515ac17429eb6fb67.zip |
Initial workqueue implemention, with a simple test.
It seems to be working, but more tuning is needed.
Diffstat (limited to 'src/common/workqueue.h')
-rw-r--r-- | src/common/workqueue.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/common/workqueue.h b/src/common/workqueue.h new file mode 100644 index 0000000000..e502734b84 --- /dev/null +++ b/src/common/workqueue.h @@ -0,0 +1,37 @@ +/* Copyright (c) 2013, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef TOR_WORKQUEUE_H +#define TOR_WORKQUEUE_H + +#include "compat.h" + +typedef struct replyqueue_s replyqueue_t; +typedef struct threadpool_s threadpool_t; + + +#define WQ_CMD_RUN 0 +#define WQ_CMD_CANCEL 1 + +#define WQ_RPL_QUEUE 0 +#define WQ_RPL_NOQUEUE 1 +#define WQ_RPL_ERROR 2 +#define WQ_RPL_SHUTDOWN 3 + +void *threadpool_queue_work(threadpool_t *pool, + int (*fn)(int, void *, void *), + void (*reply_fn)(void *), + void *arg); +int threadpool_start_threads(threadpool_t *pool, int n); +threadpool_t *threadpool_new(int n_threads, + replyqueue_t *replyqueue, + void *(*new_thread_state_fn)(void*), + void (*free_thread_state_fn)(void*), + void *arg); +replyqueue_t *threadpool_get_replyqueue(threadpool_t *tp); + +replyqueue_t *replyqueue_new(void); +tor_socket_t replyqueue_get_socket(replyqueue_t *rq); +void replyqueue_process(replyqueue_t *queue); + +#endif |