tor/src/common/workqueue.h

48 lines
1.9 KiB
C
Raw Normal View History

/* Copyright (c) 2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_WORKQUEUE_H
#define TOR_WORKQUEUE_H
#include "compat.h"
/** A replyqueue is used to tell the main thread about the outcome of
* work that we queued for the the workers. */
typedef struct replyqueue_s replyqueue_t;
/** A thread-pool manages starting threads and passing work to them. */
typedef struct threadpool_s threadpool_t;
/** A workqueue entry represents a request that has been passed to a thread
* pool. */
2013-09-24 22:57:40 +02:00
typedef struct workqueue_entry_s workqueue_entry_t;
/** Possible return value from a work function: indicates success. */
2013-09-24 22:57:40 +02:00
#define WQ_RPL_REPLY 0
/** Possible return value from a work function: indicates fatal error */
2013-09-24 22:57:40 +02:00
#define WQ_RPL_ERROR 1
/** Possible return value from a work function: indicates thread is shutting
* down. */
2013-09-24 22:57:40 +02:00
#define WQ_RPL_SHUTDOWN 2
2013-09-24 22:57:40 +02:00
workqueue_entry_t *threadpool_queue_work(threadpool_t *pool,
int (*fn)(void *, void *),
void (*reply_fn)(void *),
void *arg);
int threadpool_queue_for_all(threadpool_t *pool,
void *(*dup_fn)(const void *),
int (*fn)(void *, void *),
void (*reply_fn)(void *),
void *arg);
2013-09-24 22:57:40 +02:00
int workqueue_entry_cancel(workqueue_entry_t *pending_work);
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);
2013-09-25 20:31:59 +02:00
replyqueue_t *replyqueue_new(uint32_t alertsocks_flags);
tor_socket_t replyqueue_get_socket(replyqueue_t *rq);
void replyqueue_process(replyqueue_t *queue);
#endif