X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Flib%2Fworkq.h;h=2c4c11d27e0f689aaa9e9998466b13d13a2b8f8a;hb=3f8a3a045ea058657030f588a10f786449d00e0d;hp=92c66e1f5003c6b69133076faaf4aac7fecc600a;hpb=b5752d5d38754259dc2bb30e1461ae0431c2333d;p=bacula%2Fbacula diff --git a/bacula/src/lib/workq.h b/bacula/src/lib/workq.h index 92c66e1f50..2c4c11d27e 100644 --- a/bacula/src/lib/workq.h +++ b/bacula/src/lib/workq.h @@ -10,7 +10,7 @@ * Version $Id$ */ /* - Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker + Copyright (C) 2000-2003 Kern Sibbald and John Walker This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -29,41 +29,42 @@ */ -#ifndef __WORKQ_H +#ifndef __WORKQ_H #define __WORKQ_H 1 -/* +/* * Structure to keep track of work queue request */ typedef struct workq_ele_tag { struct workq_ele_tag *next; - void *data; + void *data; } workq_ele_t; -/* +/* * Structure describing a work queue */ typedef struct workq_tag { - pthread_mutex_t mutex; /* queue access control */ - pthread_cond_t work; /* wait for work */ - pthread_attr_t attr; /* create detached threads */ - workq_ele_t *first, *last; /* work queue */ - int valid; /* queue initialized */ - int quit; /* workq should quit */ - int max_workers; /* max threads */ - int num_workers; /* current threads */ - int idle_workers; /* idle threads */ - void (*engine)(void *arg); /* user engine */ + pthread_mutex_t mutex; /* queue access control */ + pthread_cond_t work; /* wait for work */ + pthread_attr_t attr; /* create detached threads */ + workq_ele_t *first, *last; /* work queue */ + int valid; /* queue initialized */ + int quit; /* workq should quit */ + int max_workers; /* max threads */ + int num_workers; /* current threads */ + int idle_workers; /* idle threads */ + void *(*engine)(void *arg); /* user engine */ } workq_t; #define WORKQ_VALID 0xdec1992 extern int workq_init( workq_t *wq, - int threads, /* maximum threads */ - void (*engine)(void *) /* engine routine */ + int threads, /* maximum threads */ + void *(*engine)(void *) /* engine routine */ ); extern int workq_destroy(workq_t *wq); -extern int workq_add(workq_t *wq, void *data); +extern int workq_add(workq_t *wq, void *element, workq_ele_t **work_item, int priority); +extern int workq_remove(workq_t *wq, workq_ele_t *work_item); #endif /* __WORKQ_H */