} workerthread_t;
static void queue_reply(replyqueue_t *queue, workqueue_entry_t *work);
-static void workerthread_free(workerthread_t *thread);
-static void replyqueue_free(replyqueue_t *queue);
+static void workerthread_free_(workerthread_t *thread);
+#define workerthread_free(thread) \
+ FREE_AND_NULL(workerthread_t, workerthread_free_, (thread))
+static void replyqueue_free_(replyqueue_t *queue);
+#define replyqueue_free(queue) \
+ FREE_AND_NULL(replyqueue_t, replyqueue_free_, (queue))
/** Allocate and return a new workqueue_entry_t, set up to run the function
* <b>fn</b> in the worker thread, and <b>reply_fn</b> in the main
* Free up the resources allocated by a worker thread.
*/
static void
-workerthread_free(workerthread_t *thread)
+workerthread_free_(workerthread_t *thread)
{
tor_free(thread);
}
* Free up the resources allocated by worker threads, worker thread pool, ...
*/
void
-threadpool_free(threadpool_t *pool)
+threadpool_free_(threadpool_t *pool)
{
if (!pool)
return;
* Free up the resources allocated by a reply queue.
*/
static void
-replyqueue_free(replyqueue_t *queue)
+replyqueue_free_(replyqueue_t *queue)
{
if (!queue)
return;
void *(*new_thread_state_fn)(void*),
void (*free_thread_state_fn)(void*),
void *arg);
-void threadpool_free(threadpool_t *tp);
+void threadpool_free_(threadpool_t *tp);
+#define threadpool_free(pool) \
+ FREE_AND_NULL(threadpool_t, threadpool_free_, (pool))
replyqueue_t *threadpool_get_replyqueue(threadpool_t *tp);
replyqueue_t *replyqueue_new(uint32_t alertsocks_flags);