xref: /netbsd-src/external/bsd/openldap/dist/include/ldap_rq.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1*549b59edSchristos /*	$NetBSD: ldap_rq.h,v 1.3 2021/08/14 16:14:55 christos Exp $	*/
24e6df137Slukem 
3d11b170bStron /* $OpenLDAP$ */
42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
52de962bdSlukem  *
6*549b59edSchristos  * Copyright 1998-2021 The OpenLDAP Foundation.
72de962bdSlukem  * All rights reserved.
82de962bdSlukem  *
92de962bdSlukem  * Redistribution and use in source and binary forms, with or without
102de962bdSlukem  * modification, are permitted only as authorized by the OpenLDAP
112de962bdSlukem  * Public License.
122de962bdSlukem  *
132de962bdSlukem  * A copy of this license is available in file LICENSE in the
142de962bdSlukem  * top-level directory of the distribution or, alternatively, at
152de962bdSlukem  * <http://www.OpenLDAP.org/license.html>.
162de962bdSlukem  */
172de962bdSlukem 
182de962bdSlukem #ifndef LDAP_RQ_H
192de962bdSlukem #define LDAP_RQ_H 1
202de962bdSlukem 
212de962bdSlukem #include <ldap_cdefs.h>
222de962bdSlukem 
232de962bdSlukem LDAP_BEGIN_DECL
242de962bdSlukem 
252de962bdSlukem typedef struct re_s {
262de962bdSlukem 	struct timeval next_sched;
272de962bdSlukem 	struct timeval interval;
282de962bdSlukem 	LDAP_STAILQ_ENTRY(re_s) tnext; /* it includes running */
292de962bdSlukem 	LDAP_STAILQ_ENTRY(re_s) rnext;
302de962bdSlukem 	ldap_pvt_thread_start_t *routine;
312de962bdSlukem 	void *arg;
322de962bdSlukem 	char *tname;
332de962bdSlukem 	char *tspec;
34*549b59edSchristos 	void *pool_cookie;
352de962bdSlukem } re_t;
362de962bdSlukem 
372de962bdSlukem typedef struct runqueue_s {
382de962bdSlukem 	LDAP_STAILQ_HEAD(l, re_s) task_list;
392de962bdSlukem 	LDAP_STAILQ_HEAD(rl, re_s) run_list;
402de962bdSlukem 	ldap_pvt_thread_mutex_t	rq_mutex;
412de962bdSlukem } runqueue_t;
422de962bdSlukem 
432de962bdSlukem LDAP_F( struct re_s* )
442de962bdSlukem ldap_pvt_runqueue_insert(
452de962bdSlukem 	struct runqueue_s* rq,
462de962bdSlukem 	time_t interval,
472de962bdSlukem 	ldap_pvt_thread_start_t* routine,
482de962bdSlukem 	void *arg,
492de962bdSlukem 	char *tname,
502de962bdSlukem 	char *tspec
512de962bdSlukem );
522de962bdSlukem 
532de962bdSlukem LDAP_F( struct re_s* )
542de962bdSlukem ldap_pvt_runqueue_find(
552de962bdSlukem 	struct runqueue_s* rq,
562de962bdSlukem 	ldap_pvt_thread_start_t* routine,
572de962bdSlukem 	void *arg
582de962bdSlukem );
592de962bdSlukem 
602de962bdSlukem LDAP_F( void )
612de962bdSlukem ldap_pvt_runqueue_remove(
622de962bdSlukem 	struct runqueue_s* rq,
632de962bdSlukem 	struct re_s* entry
642de962bdSlukem );
652de962bdSlukem 
662de962bdSlukem LDAP_F( struct re_s* )
672de962bdSlukem ldap_pvt_runqueue_next_sched(
682de962bdSlukem 	struct runqueue_s* rq,
692de962bdSlukem 	struct timeval* next_run
702de962bdSlukem );
712de962bdSlukem 
722de962bdSlukem LDAP_F( void )
732de962bdSlukem ldap_pvt_runqueue_runtask(
742de962bdSlukem 	struct runqueue_s* rq,
752de962bdSlukem 	struct re_s* entry
762de962bdSlukem );
772de962bdSlukem 
782de962bdSlukem LDAP_F( void )
792de962bdSlukem ldap_pvt_runqueue_stoptask(
802de962bdSlukem 	struct runqueue_s* rq,
812de962bdSlukem 	struct re_s* entry
822de962bdSlukem );
832de962bdSlukem 
842de962bdSlukem LDAP_F( int )
852de962bdSlukem ldap_pvt_runqueue_isrunning(
862de962bdSlukem 	struct runqueue_s* rq,
872de962bdSlukem 	struct re_s* entry
882de962bdSlukem );
892de962bdSlukem 
902de962bdSlukem LDAP_F( void )
912de962bdSlukem ldap_pvt_runqueue_resched(
922de962bdSlukem 	struct runqueue_s* rq,
932de962bdSlukem 	struct re_s* entry,
942de962bdSlukem 	int defer
952de962bdSlukem );
962de962bdSlukem 
972de962bdSlukem LDAP_F( int )
982de962bdSlukem ldap_pvt_runqueue_persistent_backload(
992de962bdSlukem 	struct runqueue_s* rq
1002de962bdSlukem );
1012de962bdSlukem 
1022de962bdSlukem LDAP_END_DECL
1032de962bdSlukem 
1042de962bdSlukem #endif
105