1/*	$NetBSD: ldap_rq.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
2
3/* $OpenLDAP$ */
4/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 *
6 * Copyright 1998-2021 The OpenLDAP Foundation.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted only as authorized by the OpenLDAP
11 * Public License.
12 *
13 * A copy of this license is available in file LICENSE in the
14 * top-level directory of the distribution or, alternatively, at
15 * <http://www.OpenLDAP.org/license.html>.
16 */
17
18#ifndef LDAP_RQ_H
19#define LDAP_RQ_H 1
20
21#include <ldap_cdefs.h>
22
23LDAP_BEGIN_DECL
24
25typedef struct re_s {
26	struct timeval next_sched;
27	struct timeval interval;
28	LDAP_STAILQ_ENTRY(re_s) tnext; /* it includes running */
29	LDAP_STAILQ_ENTRY(re_s) rnext;
30	ldap_pvt_thread_start_t *routine;
31	void *arg;
32	char *tname;
33	char *tspec;
34	void *pool_cookie;
35} re_t;
36
37typedef struct runqueue_s {
38	LDAP_STAILQ_HEAD(l, re_s) task_list;
39	LDAP_STAILQ_HEAD(rl, re_s) run_list;
40	ldap_pvt_thread_mutex_t	rq_mutex;
41} runqueue_t;
42
43LDAP_F( struct re_s* )
44ldap_pvt_runqueue_insert(
45	struct runqueue_s* rq,
46	time_t interval,
47	ldap_pvt_thread_start_t* routine,
48	void *arg,
49	char *tname,
50	char *tspec
51);
52
53LDAP_F( struct re_s* )
54ldap_pvt_runqueue_find(
55	struct runqueue_s* rq,
56	ldap_pvt_thread_start_t* routine,
57	void *arg
58);
59
60LDAP_F( void )
61ldap_pvt_runqueue_remove(
62	struct runqueue_s* rq,
63	struct re_s* entry
64);
65
66LDAP_F( struct re_s* )
67ldap_pvt_runqueue_next_sched(
68	struct runqueue_s* rq,
69	struct timeval* next_run
70);
71
72LDAP_F( void )
73ldap_pvt_runqueue_runtask(
74	struct runqueue_s* rq,
75	struct re_s* entry
76);
77
78LDAP_F( void )
79ldap_pvt_runqueue_stoptask(
80	struct runqueue_s* rq,
81	struct re_s* entry
82);
83
84LDAP_F( int )
85ldap_pvt_runqueue_isrunning(
86	struct runqueue_s* rq,
87	struct re_s* entry
88);
89
90LDAP_F( void )
91ldap_pvt_runqueue_resched(
92	struct runqueue_s* rq,
93	struct re_s* entry,
94	int defer
95);
96
97LDAP_F( int )
98ldap_pvt_runqueue_persistent_backload(
99	struct runqueue_s* rq
100);
101
102LDAP_END_DECL
103
104#endif
105