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;
/** 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 */

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
* respond to <b>onionskin</b> for the circuit <b>circ</b>.
*

View File

@ -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,