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