#ifndef _UCW_WORKQUEUE_H
#define _UCW_WORKQUEUE_H
+#ifdef CONFIG_UCW_CLEAN_ABI
+#define raw_queue_cleanup ucw_raw_queue_cleanup
+#define raw_queue_get ucw_raw_queue_get
+#define raw_queue_init ucw_raw_queue_init
+#define raw_queue_put ucw_raw_queue_put
+#define raw_queue_try_get ucw_raw_queue_try_get
+#define work_queue_cleanup ucw_work_queue_cleanup
+#define work_queue_init ucw_work_queue_init
+#define work_submit ucw_work_submit
+#define work_try_wait ucw_work_try_wait
+#define work_wait ucw_work_wait
+#define worker_pool_cleanup ucw_worker_pool_cleanup
+#define worker_pool_init ucw_worker_pool_init
+#endif
+
/*
* A thread pool is a set of threads receiving work requests from a common queue,
* each work request contains a pointer to a function inside the thread.
* until all of them finish.
*/
-#include "ucw/semaphore.h"
-#include "ucw/clists.h"
+#include <ucw/semaphore.h>
+#include <ucw/clists.h>
#include <pthread.h>
pthread_mutex_t queue_mutex;
clist pri0_queue; // Ordinary queue for requests with priority=0
struct work **pri_heap; // A heap for request with priority>0
- uns heap_cnt, heap_max;
+ uint heap_cnt, heap_max;
sem_t *queue_sem; // Number of requests queued
};
struct worker_pool {
struct raw_queue requests;
- uns num_threads;
- uns stack_size; // 0 for default
+ uint num_threads;
+ uint stack_size; // 0 for default
struct worker_thread *(*new_thread)(void); // default: xmalloc the struct
void (*free_thread)(struct worker_thread *t); // default: xfree
void (*init_thread)(struct worker_thread *t); // default: empty
struct work_queue {
struct worker_pool *pool;
- uns nr_running; // Number of requests in service
+ uint nr_running; // Number of requests in service
struct raw_queue finished; // Finished requests queue up here
};
struct work { // A single request
cnode n;
- uns priority;
+ uint priority;
struct work_queue *reply_to; // Where to queue the request when it's finished
void (*go)(struct worker_thread *t, struct work *w); // Called inside the worker thread
};