aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-04-06 15:51:52 -0400
committerNick Mathewson <nickm@torproject.org>2017-04-15 11:21:33 -0400
commitb022ea32a685e4163595b5a3ded0bc00bb378896 (patch)
tree8764e6a886f29123b9011bc5248ff2d61e13cfff /src
parent222122450c1e879989c440088c01eaa95e4d6980 (diff)
downloadtor-b022ea32a685e4163595b5a3ded0bc00bb378896.tar.gz
tor-b022ea32a685e4163595b5a3ded0bc00bb378896.zip
Expand cpuworker API to allow other work types
Diffstat (limited to 'src')
-rw-r--r--src/common/workqueue.h2
-rw-r--r--src/or/cpuworker.c14
-rw-r--r--src/or/cpuworker.h6
3 files changed, 21 insertions, 1 deletions
diff --git a/src/common/workqueue.h b/src/common/workqueue.h
index 5d14e7f6a7..7b483eb7ac 100644
--- a/src/common/workqueue.h
+++ b/src/common/workqueue.h
@@ -16,7 +16,7 @@ typedef struct threadpool_s threadpool_t;
typedef struct workqueue_entry_s workqueue_entry_t;
/** Possible return value from a work function: */
-typedef enum {
+typedef enum workqueue_reply_t {
WQ_RPL_REPLY = 0, /** indicates success */
WQ_RPL_ERROR = 1, /** indicates fatal error */
WQ_RPL_SHUTDOWN = 2, /** indicates thread is shutting down */
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index 790c147d7b..f79cd067cb 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -479,6 +479,20 @@ queue_pending_tasks(void)
}
}
+/** DOCDOC */
+workqueue_entry_t *
+cpuworker_queue_work(workqueue_reply_t (*fn)(void *, void *),
+ void (*reply_fn)(void *),
+ void *arg)
+{
+ tor_assert(threadpool);
+
+ return threadpool_queue_work(threadpool,
+ fn,
+ reply_fn,
+ arg);
+}
+
/** Try to tell a cpuworker to perform the public key operations necessary to
* respond to <b>onionskin</b> for the circuit <b>circ</b>.
*
diff --git a/src/or/cpuworker.h b/src/or/cpuworker.h
index fd426e21f6..9bc5d962dd 100644
--- a/src/or/cpuworker.h
+++ b/src/or/cpuworker.h
@@ -14,6 +14,12 @@
void cpu_init(void);
void cpuworkers_rotate_keyinfo(void);
+struct workqueue_entry_s;
+enum workqueue_reply_t;
+struct workqueue_entry_s *cpuworker_queue_work(
+ enum workqueue_reply_t (*fn)(void *, void *),
+ void (*reply_fn)(void *),
+ void *arg);
struct create_cell_t;
int assign_onionskin_to_cpuworker(or_circuit_t *circ,