Expand cpuworker API to allow other work types

This commit is contained in:
Nick Mathewson 2017-04-06 15:51:52 -04:00
parent 222122450c
commit b022ea32a6
3 changed files with 21 additions and 1 deletions

View File

@ -16,7 +16,7 @@ typedef struct threadpool_s threadpool_t;
typedef struct workqueue_entry_s workqueue_entry_t; typedef struct workqueue_entry_s workqueue_entry_t;
/** Possible return value from a work function: */ /** Possible return value from a work function: */
typedef enum { typedef enum workqueue_reply_t {
WQ_RPL_REPLY = 0, /** indicates success */ WQ_RPL_REPLY = 0, /** indicates success */
WQ_RPL_ERROR = 1, /** indicates fatal error */ WQ_RPL_ERROR = 1, /** indicates fatal error */
WQ_RPL_SHUTDOWN = 2, /** indicates thread is shutting down */ WQ_RPL_SHUTDOWN = 2, /** indicates thread is shutting down */

View File

@ -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 /** Try to tell a cpuworker to perform the public key operations necessary to
* respond to <b>onionskin</b> for the circuit <b>circ</b>. * respond to <b>onionskin</b> for the circuit <b>circ</b>.
* *

View File

@ -14,6 +14,12 @@
void cpu_init(void); void cpu_init(void);
void cpuworkers_rotate_keyinfo(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; struct create_cell_t;
int assign_onionskin_to_cpuworker(or_circuit_t *circ, int assign_onionskin_to_cpuworker(or_circuit_t *circ,