diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-04-06 15:51:52 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-04-15 11:21:33 -0400 |
commit | b022ea32a685e4163595b5a3ded0bc00bb378896 (patch) | |
tree | 8764e6a886f29123b9011bc5248ff2d61e13cfff /src | |
parent | 222122450c1e879989c440088c01eaa95e4d6980 (diff) | |
download | tor-b022ea32a685e4163595b5a3ded0bc00bb378896.tar.gz tor-b022ea32a685e4163595b5a3ded0bc00bb378896.zip |
Expand cpuworker API to allow other work types
Diffstat (limited to 'src')
-rw-r--r-- | src/common/workqueue.h | 2 | ||||
-rw-r--r-- | src/or/cpuworker.c | 14 | ||||
-rw-r--r-- | src/or/cpuworker.h | 6 |
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, |