X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fldap_pvt_thread.h;h=b0ed549d14bd774cc89df8f3c01fa91cc810c55a;hb=691729f8f3f6e4ed875d04eb3d2bf30952a07a68;hp=7d818c4b09e46a907c63dae8aa49c4b60b978852;hpb=33f4955c07e152093a0ae32348dceb25e4b6130d;p=openldap diff --git a/include/ldap_pvt_thread.h b/include/ldap_pvt_thread.h index 7d818c4b09..b0ed549d14 100644 --- a/include/ldap_pvt_thread.h +++ b/include/ldap_pvt_thread.h @@ -1,179 +1,228 @@ +/* ldap_pvt_thread.h - ldap threads header file */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2000 The OpenLDAP Foundation, Redwood City, California, USA +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * - * Redistribution and use in source and binary forms are permitted only - * as authorized by the OpenLDAP Public License. A copy of this - * license is available at http://www.OpenLDAP.org/license.html or - * in file LICENSE in the top-level directory of the distribution. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ -/* ldap_pvt_thread.h - ldap threads header file NG */ #ifndef _LDAP_PVT_THREAD_H -#define _LDAP_PVT_THREAD_H +#define _LDAP_PVT_THREAD_H /* libldap_r/ldap_thr_debug.h #undefines this */ #include "ldap_cdefs.h" #include "ldap_int_thread.h" LDAP_BEGIN_DECL -typedef ldap_int_thread_t ldap_pvt_thread_t; -typedef ldap_int_thread_mutex_t ldap_pvt_thread_mutex_t; -typedef ldap_int_thread_cond_t ldap_pvt_thread_cond_t; +#ifndef LDAP_PVT_THREAD_H_DONE +typedef ldap_int_thread_t ldap_pvt_thread_t; +#ifdef LDAP_THREAD_DEBUG_WRAP +typedef ldap_debug_thread_mutex_t ldap_pvt_thread_mutex_t; +typedef ldap_debug_thread_cond_t ldap_pvt_thread_cond_t; +typedef ldap_debug_thread_rdwr_t ldap_pvt_thread_rdwr_t; +#else +typedef ldap_int_thread_mutex_t ldap_pvt_thread_mutex_t; +typedef ldap_int_thread_cond_t ldap_pvt_thread_cond_t; +typedef ldap_int_thread_rdwr_t ldap_pvt_thread_rdwr_t; +#endif +#endif /* !LDAP_PVT_THREAD_H_DONE */ +#define ldap_pvt_thread_equal ldap_int_thread_equal -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_initialize LDAP_P(( void )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_destroy LDAP_P(( void )); -LIBLDAP_F( unsigned int ) +LDAP_F( unsigned int ) ldap_pvt_thread_sleep LDAP_P(( unsigned int s )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_get_concurrency LDAP_P(( void )); -#ifndef LDAP_THREAD_CONCURRENCY - /* three concurrent threads should be enough */ -#define LDAP_THREAD_CONCURRENCY 3 -#endif -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_set_concurrency LDAP_P(( int )); #define LDAP_PVT_THREAD_CREATE_JOINABLE 0 #define LDAP_PVT_THREAD_CREATE_DETACHED 1 -LIBLDAP_F( int ) +#ifndef LDAP_PVT_THREAD_H_DONE +#define LDAP_PVT_THREAD_SET_STACK_SIZE +#ifndef LDAP_PVT_THREAD_STACK_SIZE + /* LARGE stack. Will be twice as large on 64 bit machine. */ +#define LDAP_PVT_THREAD_STACK_SIZE ( 1 * 1024 * 1024 * sizeof(void *) ) +/* May be explicitly defined to zero to disable it */ +#elif LDAP_PVT_THREAD_STACK_SIZE == 0 +#undef LDAP_PVT_THREAD_SET_STACK_SIZE +#endif +#endif /* !LDAP_PVT_THREAD_H_DONE */ + +LDAP_F( int ) ldap_pvt_thread_create LDAP_P(( - ldap_pvt_thread_t * thread, + ldap_pvt_thread_t * thread, int detach, - void *(*start_routine)( void * ), + void *(*start_routine)( void * ), void *arg)); -LIBLDAP_F( void ) +LDAP_F( void ) ldap_pvt_thread_exit LDAP_P(( void *retval )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_join LDAP_P(( ldap_pvt_thread_t thread, void **status )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_kill LDAP_P(( ldap_pvt_thread_t thread, int signo )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_yield LDAP_P(( void )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_cond_init LDAP_P(( ldap_pvt_thread_cond_t *cond )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_cond_destroy LDAP_P(( ldap_pvt_thread_cond_t *cond )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_cond_signal LDAP_P(( ldap_pvt_thread_cond_t *cond )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_cond_broadcast LDAP_P(( ldap_pvt_thread_cond_t *cond )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_cond_wait LDAP_P(( - ldap_pvt_thread_cond_t *cond, + ldap_pvt_thread_cond_t *cond, ldap_pvt_thread_mutex_t *mutex )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_mutex_init LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_mutex_destroy LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_mutex_lock LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_mutex_trylock LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_mutex_unlock LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); -#ifndef LDAP_THREAD_HAVE_RDWR -typedef struct ldap_pvt_thread_rdwr_var { - ldap_pvt_thread_mutex_t ltrw_mutex; - ldap_pvt_thread_cond_t ltrw_read; /* wait for read */ - ldap_pvt_thread_cond_t ltrw_write; /* wait for write */ - int ltrw_valid; -#define LDAP_PVT_THREAD_RDWR_VALID 0x0bad - int ltrw_r_active; - int ltrw_w_active; - int ltrw_r_wait; - int ltrw_w_wait; -} ldap_pvt_thread_rdwr_t; -#endif +LDAP_F( ldap_pvt_thread_t ) +ldap_pvt_thread_self LDAP_P(( void )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_init LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_destroy LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_rlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_rtrylock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_runlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_wlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_wtrylock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_wunlock LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); #ifdef LDAP_DEBUG -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_readers LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_writers LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_rdwr_active LDAP_P((ldap_pvt_thread_rdwr_t *rdwrp)); #endif /* LDAP_DEBUG */ #define LDAP_PVT_THREAD_EINVAL EINVAL #define LDAP_PVT_THREAD_EBUSY EINVAL +#ifndef LDAP_PVT_THREAD_H_DONE +typedef ldap_int_thread_pool_t ldap_pvt_thread_pool_t; -typedef struct t_ldap_pvt_thread_pool *ldap_pvt_thread_pool_t; - +typedef void * (ldap_pvt_thread_start_t) LDAP_P((void *ctx, void *arg)); +typedef void (ldap_pvt_thread_pool_keyfree_t) LDAP_P((void *key, void *data)); +#endif /* !LDAP_PVT_THREAD_H_DONE */ -LIBLDAP_F( int ) -ldap_pvt_thread_pool_initialize LDAP_P(( - ldap_pvt_thread_pool_t *pool_out, - int max_concurrency, - int max_pending )); +LDAP_F( int ) +ldap_pvt_thread_pool_init LDAP_P(( + ldap_pvt_thread_pool_t *pool_out, + int max_threads, + int max_pending )); -LIBLDAP_F( int ) +LDAP_F( int ) ldap_pvt_thread_pool_submit LDAP_P(( - ldap_pvt_thread_pool_t pool, - void *(*start_routine)( void * ), - void *arg )); + ldap_pvt_thread_pool_t *pool, + ldap_pvt_thread_start_t *start, + void *arg )); -LIBLDAP_F( int ) +LDAP_F( int ) +ldap_pvt_thread_pool_maxthreads LDAP_P(( + ldap_pvt_thread_pool_t *pool, + int max_threads )); + +LDAP_F( int ) ldap_pvt_thread_pool_backload LDAP_P(( - ldap_pvt_thread_pool_t pool )); + ldap_pvt_thread_pool_t *pool )); + +LDAP_F( int ) +ldap_pvt_thread_pool_pause LDAP_P(( + ldap_pvt_thread_pool_t *pool )); -LIBLDAP_F( int ) +LDAP_F( int ) +ldap_pvt_thread_pool_resume LDAP_P(( + ldap_pvt_thread_pool_t *pool )); + +LDAP_F( int ) ldap_pvt_thread_pool_destroy LDAP_P(( - ldap_pvt_thread_pool_t pool, - int run_pending )); + ldap_pvt_thread_pool_t *pool, + int run_pending )); + +LDAP_F( int ) +ldap_pvt_thread_pool_getkey LDAP_P(( + void *ctx, + void *key, + void **data, + ldap_pvt_thread_pool_keyfree_t **kfree )); + +LDAP_F( int ) +ldap_pvt_thread_pool_setkey LDAP_P(( + void *ctx, + void *key, + void *data, + ldap_pvt_thread_pool_keyfree_t *kfree )); + +LDAP_F( void ) +ldap_pvt_thread_pool_purgekey LDAP_P(( void *key )); + +LDAP_F( void *) +ldap_pvt_thread_pool_context LDAP_P(( void )); +LDAP_F( void ) +ldap_pvt_thread_pool_context_reset LDAP_P(( void *key )); LDAP_END_DECL +#define LDAP_PVT_THREAD_H_DONE #endif /* _LDAP_THREAD_H */