aboutsummaryrefslogtreecommitdiff
path: root/src/common/workqueue.h
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2013-09-23 01:19:16 -0400
committerNick Mathewson <nickm@torproject.org>2015-01-14 10:56:24 -0500
commita82604b526a2a258e057d6d515ac17429eb6fb67 (patch)
treef42e29cb20db95b0cf5fa2abc0c59d56841da3e6 /src/common/workqueue.h
parent6c9363310aaea9d39fae4d9dd50e78d42c3598b3 (diff)
downloadtor-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.h37
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