123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948 |
- #ifndef ITHREAD_H
- #define ITHREAD_H
- /*******************************************************************************
- *
- * Copyright (c) 2000-2003 Intel Corporation
- * All rights reserved.
- * Copyright (c) 2012 France Telecom All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither name of Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************/
- /*!
- * \file
- */
- #if !defined(WIN32)
- #include <sys/param.h>
- #endif
- #include "UpnpGlobal.h" /* For UPNP_INLINE, EXPORT_SPEC */
- #include "UpnpUniStd.h" /* for close() */
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <pthread.h>
- #if defined(BSD) && !defined(__GNU__)
- #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
- #endif
- #if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
- /* This system has SuS2-compliant mutex attributes.
- * E.g. on Cygwin, where we don't have the old nonportable (NP) symbols
- */
- #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL
- #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
- #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK
- #else /* PTHREAD_MUTEX_RECURSIVE */
- #define ITHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_FAST_NP
- #define ITHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE_NP
- #define ITHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK_NP
- #endif /* PTHREAD_MUTEX_RECURSIVE */
- #define ITHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
- #define ITHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
- #define ITHREAD_CANCELED PTHREAD_CANCELED
- #define ITHREAD_STACK_MIN PTHREAD_STACK_MIN
- #define ITHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED
- #define ITHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
- /***************************************************************************
- * Name: ithread_t
- *
- * Description:
- * Thread handle.
- * typedef to pthread_t.
- * Internal Use Only.
- ***************************************************************************/
- typedef pthread_t ithread_t;
-
- /****************************************************************************
- * Name: ithread_attr_t
- *
- * Description:
- * Thread attribute.
- * typedef to pthread_attr_t
- * Internal Use Only
- ***************************************************************************/
- typedef pthread_attr_t ithread_attr_t;
- /****************************************************************************
- * Name: start_routine
- *
- * Description:
- * Thread start routine
- * Internal Use Only.
- ***************************************************************************/
- typedef void *(*start_routine)(void *arg);
-
- /****************************************************************************
- * Name: ithread_cond_t
- *
- * Description:
- * condition variable.
- * typedef to pthread_cond_t
- * Internal Use Only.
- ***************************************************************************/
- typedef pthread_cond_t ithread_cond_t;
- /****************************************************************************
- * Name: ithread_mutexattr_t
- *
- * Description:
- * Mutex attribute.
- * typedef to pthread_mutexattr_t
- * Internal Use Only
- ***************************************************************************/
- typedef pthread_mutexattr_t ithread_mutexattr_t;
- /****************************************************************************
- * Name: ithread_mutex_t
- *
- * Description:
- * Mutex.
- * typedef to pthread_mutex_t
- * Internal Use Only.
- ***************************************************************************/
- typedef pthread_mutex_t ithread_mutex_t;
- /****************************************************************************
- * Name: ithread_condattr_t
- *
- * Description:
- * Condition attribute.
- * typedef to pthread_condattr_t
- * NOT USED
- * Internal Use Only
- ***************************************************************************/
- typedef pthread_condattr_t ithread_condattr_t;
- /****************************************************************************
- * Name: ithread_rwlockattr_t
- *
- * Description:
- * Mutex attribute.
- * typedef to pthread_rwlockattr_t
- * Internal Use Only
- ***************************************************************************/
- #if UPNP_USE_RWLOCK
- typedef pthread_rwlockattr_t ithread_rwlockattr_t;
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Name: ithread_rwlock_t
- *
- * Description:
- * Condition attribute.
- * typedef to pthread_rwlock_t
- * Internal Use Only
- ***************************************************************************/
- #if UPNP_USE_RWLOCK
- typedef pthread_rwlock_t ithread_rwlock_t;
- #else
- /* Read-write locks aren't available: use mutex instead. */
- typedef ithread_mutex_t ithread_rwlock_t;
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_initialize_library
- *
- * Description:
- * Initializes the library. Does nothing in all implementations, except
- * when statically linked for WIN32.
- * Parameters:
- * none.
- * Returns:
- * 0 on success, Nonzero on failure.
- ***************************************************************************/
- static UPNP_INLINE int ithread_initialize_library(void) {
- int ret = 0;
- return ret;
- }
- /****************************************************************************
- * Function: ithread_cleanup_library
- *
- * Description:
- * Clean up library resources. Does nothing in all implementations, except
- * when statically linked for WIN32.
- * Parameters:
- * none.
- * Returns:
- * 0 on success, Nonzero on failure.
- ***************************************************************************/
- static UPNP_INLINE int ithread_cleanup_library(void) {
- int ret = 0;
- return ret;
- }
- /****************************************************************************
- * Function: ithread_initialize_thread
- *
- * Description:
- * Initializes the thread. Does nothing in all implementations, except
- * when statically linked for WIN32.
- * Parameters:
- * none.
- * Returns:
- * 0 on success, Nonzero on failure.
- ***************************************************************************/
- static UPNP_INLINE int ithread_initialize_thread(void) {
- int ret = 0;
- #if defined(WIN32) && defined(PTW32_STATIC_LIB)
- ret = !pthread_win32_thread_attach_np();
- #endif
- return ret;
- }
- /****************************************************************************
- * Function: ithread_cleanup_thread
- *
- * Description:
- * Clean up thread resources. Does nothing in all implementations, except
- * when statically linked for WIN32.
- * Parameters:
- * none.
- * Returns:
- * 0 on success, Nonzero on failure.
- ***************************************************************************/
- static UPNP_INLINE int ithread_cleanup_thread(void) {
- int ret = 0;
- #if defined(WIN32) && defined(PTW32_STATIC_LIB)
- ret = !pthread_win32_thread_detach_np();
- #endif
- return ret;
- }
- /****************************************************************************
- * Function: ithread_mutexattr_init
- *
- * Description:
- * Initializes a mutex attribute variable.
- * Used to set the type of the mutex.
- * Parameters:
- * ithread_mutexattr_init * attr (must be valid non NULL pointer to
- * pthread_mutexattr_t)
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_mutexattr_init
- ***************************************************************************/
- #define ithread_mutexattr_init pthread_mutexattr_init
- /****************************************************************************
- * Function: ithread_mutexattr_destroy
- *
- * Description:
- * Releases any resources held by the mutex attribute.
- * Currently there are no resources associated with the attribute
- * Parameters:
- * ithread_mutexattr_t * attr (must be valid non NULL pointer to
- * pthread_mutexattr_t)
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_mutexattr_destroy
- ***************************************************************************/
- #define ithread_mutexattr_destroy pthread_mutexattr_destroy
-
-
- /****************************************************************************
- * Function: ithread_mutexattr_setkind_np
- *
- * Description:
- * Sets the mutex type in the attribute.
- * Valid types are: ITHREAD_MUTEX_FAST_NP
- * ITHREAD_MUTEX_RECURSIVE_NP
- * ITHREAD_MUTEX_ERRORCHECK_NP
- *
- * Parameters:
- * ithread_mutexattr_t * attr (must be valid non NULL pointer to
- * ithread_mutexattr_t)
- * int kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP
- * or ITHREAD_MUTEX_ERRORCHECK_NP)
- * Returns:
- * 0 on success. Nonzero on failure.
- * Returns EINVAL if the kind is not supported.
- * See man page for pthread_mutexattr_setkind_np
- *****************************************************************************/
- #if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
- #define ithread_mutexattr_setkind_np pthread_mutexattr_settype
- #else
- #define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_mutexattr_getkind_np
- *
- * Description:
- * Gets the mutex type in the attribute.
- * Valid types are: ITHREAD_MUTEX_FAST_NP
- * ITHREAD_MUTEX_RECURSIVE_NP
- * ITHREAD_MUTEX_ERRORCHECK_NP
- *
- * Parameters:
- * ithread_mutexattr_t * attr (must be valid non NULL pointer to
- * pthread_mutexattr_t)
- * int *kind (one of ITHREAD_MUTEX_FAST_NP or ITHREAD_MUTEX_RECURSIVE_NP
- * or ITHREAD_MUTEX_ERRORCHECK_NP)
- * Returns:
- * 0 on success. Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_mutexattr_getkind_np
- *****************************************************************************/
- #if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
- #define ithread_mutexattr_getkind_np pthread_mutexattr_gettype
- #else
- #define ithread_mutexattr_getkind_np pthread_mutexattr_getkind_np
- #endif /* UPNP_USE_RWLOCK */
-
- /****************************************************************************
- * Function: ithread_mutex_init
- *
- * Description:
- * Initializes mutex.
- * Must be called before use.
- *
- * Parameters:
- * ithread_mutex_t * mutex (must be valid non NULL pointer to pthread_mutex_t)
- * const ithread_mutexattr_t * mutex_attr
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_mutex_init
- *****************************************************************************/
- #define ithread_mutex_init pthread_mutex_init
- /****************************************************************************
- * Function: ithread_mutex_lock
- *
- * Description:
- * Locks mutex.
- * Parameters:
- * ithread_mutex_t * mutex (must be valid non NULL pointer to pthread_mutex_t)
- * mutex must be initialized.
- *
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_mutex_lock
- *****************************************************************************/
- #define ithread_mutex_lock pthread_mutex_lock
-
- /****************************************************************************
- * Function: ithread_mutex_unlock
- *
- * Description:
- * Unlocks mutex.
- *
- * Parameters:
- * ithread_mutex_t * mutex (must be valid non NULL pointer to pthread_mutex_t)
- * mutex must be initialized.
- *
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_mutex_unlock
- *****************************************************************************/
- #define ithread_mutex_unlock pthread_mutex_unlock
- /****************************************************************************
- * Function: ithread_mutex_destroy
- *
- * Description:
- * Releases any resources held by the mutex.
- * Mutex can no longer be used after this call.
- * Mutex is only destroyed when there are no longer any threads waiting on it.
- * Mutex cannot be destroyed if it is locked.
- * Parameters:
- * ithread_mutex_t * mutex (must be valid non NULL pointer to pthread_mutex_t)
- * mutex must be initialized.
- * Returns:
- * 0 on success. Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_mutex_destroy
- *****************************************************************************/
- #define ithread_mutex_destroy pthread_mutex_destroy
- /****************************************************************************
- * Function: ithread_rwlockattr_init
- *
- * Description:
- * Initializes a rwlock attribute variable to default values.
- * Parameters:
- * const ithread_rwlockattr_init *attr (must be valid non NULL pointer to
- * pthread_rwlockattr_t)
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlockattr_init
- ***************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlockattr_init pthread_rwlockattr_init
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_rwlockattr_destroy
- *
- * Description:
- * Releases any resources held by the rwlock attribute.
- * Parameters:
- * ithread_rwlockattr_t *attr (must be valid non NULL pointer to
- * pthread_rwlockattr_t)
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlockattr_destroy
- ***************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlockattr_destroy pthread_rwlockattr_destroy
- #endif /* UPNP_USE_RWLOCK */
-
-
- /****************************************************************************
- * Function: ithread_rwlockatttr_setpshared
- *
- * Description:
- * Sets the rwlock type in the attribute.
- * Valid types are: ITHREAD_PROCESS_PRIVATE
- * ITHREAD_PROCESS_SHARED
- *
- * Parameters:
- * ithread_rwlockattr_t * attr (must be valid non NULL pointer to
- * ithread_rwlockattr_t)
- * int kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED)
- *
- * Returns:
- * 0 on success. Nonzero on failure.
- * Returns EINVAL if the kind is not supported.
- * See man page for pthread_rwlockattr_setkind_np
- *****************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlockatttr_setpshared pthread_rwlockatttr_setpshared
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_rwlockatttr_getpshared
- *
- * Description:
- * Gets the rwlock type in the attribute.
- * Valid types are: ITHREAD_PROCESS_PRIVATE
- * ITHREAD_PROCESS_SHARED
- *
- * Parameters:
- * ithread_rwlockattr_t * attr (must be valid non NULL pointer to
- * pthread_rwlockattr_t)
- * int *kind (one of ITHREAD_PROCESS_PRIVATE or ITHREAD_PROCESS_SHARED)
- *
- * Returns:
- * 0 on success. Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlockatttr_getpshared
- *****************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlockatttr_getpshared pthread_rwlockatttr_getpshared
- #endif /* UPNP_USE_RWLOCK */
-
- /****************************************************************************
- * Function: ithread_rwlock_init
- *
- * Description:
- * Initializes rwlock.
- * Must be called before use.
- *
- * Parameters:
- * ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
- * const ithread_rwlockattr_t *rwlock_attr
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlock_init
- *****************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlock_init pthread_rwlock_init
- #else
- /* Read-write locks aren't available: use mutex instead. */
- #define ithread_rwlock_init ithread_mutex_init
- #endif
- /****************************************************************************
- * Function: ithread_rwlock_rdlock
- *
- * Description:
- * Locks rwlock for reading.
- * Parameters:
- * ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
- * rwlock must be initialized.
- *
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlock_rdlock
- *****************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlock_rdlock pthread_rwlock_rdlock
- #else
- /* Read-write locks aren't available: use mutex instead. */
- #define ithread_rwlock_rdlock ithread_mutex_lock
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_rwlock_wrlock
- *
- * Description:
- * Locks rwlock for writting.
- * Parameters:
- * ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
- * rwlock must be initialized.
- *
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlock_wrlock
- *****************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlock_wrlock pthread_rwlock_wrlock
- #else
- /* Read-write locks aren't available: use mutex instead. */
- #define ithread_rwlock_wrlock ithread_mutex_lock
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_rwlock_unlock
- *
- * Description:
- * Unlocks rwlock.
- *
- * Parameters:
- * ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
- * rwlock must be initialized.
- *
- * Returns:
- * 0 on success, Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlock_unlock
- *****************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlock_unlock pthread_rwlock_unlock
- #else
- /* Read-write locks aren't available: use mutex instead. */
- #define ithread_rwlock_unlock ithread_mutex_unlock
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_rwlock_destroy
- *
- * Description:
- * Releases any resources held by the rwlock.
- * rwlock can no longer be used after this call.
- * rwlock is only destroyed when there are no longer any threads waiting on it.
- * rwlock cannot be destroyed if it is locked.
- * Parameters:
- * ithread_rwlock_t *rwlock (must be valid non NULL pointer to pthread_rwlock_t)
- * rwlock must be initialized.
- * Returns:
- * 0 on success. Nonzero on failure.
- * Always returns 0.
- * See man page for pthread_rwlock_destroy
- *****************************************************************************/
- #if UPNP_USE_RWLOCK
- #define ithread_rwlock_destroy pthread_rwlock_destroy
- #else
- /* Read-write locks aren't available: use mutex instead. */
- #define ithread_rwlock_destroy ithread_mutex_destroy
- #endif /* UPNP_USE_RWLOCK */
- /****************************************************************************
- * Function: ithread_cond_init
- *
- * Description:
- * Initializes condition variable.
- * Must be called before use.
- * Parameters:
- * ithread_cond_t *cond (must be valid non NULL pointer to pthread_cond_t)
- * const ithread_condattr_t *cond_attr (ignored)
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for pthread_cond_init
- *****************************************************************************/
- #define ithread_cond_init pthread_cond_init
- /****************************************************************************
- * Function: ithread_cond_signal
- *
- * Description:
- * Wakes up exactly one thread waiting on condition.
- * Associated mutex MUST be locked by thread before entering this call.
- * Parameters:
- * ithread_cond_t *cond (must be valid non NULL pointer to
- * ithread_cond_t)
- * cond must be initialized
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for pthread_cond_signal
- *****************************************************************************/
- #define ithread_cond_signal pthread_cond_signal
- /****************************************************************************
- * Function: ithread_cond_broadcast
- *
- * Description:
- * Wakes up all threads waiting on condition.
- * Associated mutex MUST be locked by thread before entering this call.
- * Parameters:
- * ithread_cond_t *cond (must be valid non NULL pointer to
- * ithread_cond_t)
- * cond must be initialized
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for pthread_cond_broadcast
- *****************************************************************************/
- #define ithread_cond_broadcast pthread_cond_broadcast
-
- /****************************************************************************
- * Function: ithread_cond_wait
- *
- * Description:
- * Atomically releases mutex and waits on condition.
- * Associated mutex MUST be locked by thread before entering this call.
- * Mutex is reacquired when call returns.
- * Parameters:
- * ithread_cond_t *cond (must be valid non NULL pointer to
- * ithread_cond_t)
- * cond must be initialized
- * ithread_mutex_t *mutex (must be valid non NULL pointer to
- * ithread_mutex_t)
- * Mutex must be locked.
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for pthread_cond_wait
- *****************************************************************************/
- #define ithread_cond_wait pthread_cond_wait
-
- /****************************************************************************
- * Function: pthread_cond_timedwait
- *
- * Description:
- * Atomically releases the associated mutex and waits on the
- * condition.
- * If the condition is not signaled in the specified time than the
- * call times out and returns.
- * Associated mutex MUST be locked by thread before entering this call.
- * Mutex is reacquired when call returns.
- * Parameters:
- * ithread_cond_t *cond (must be valid non NULL pointer to ithread_cond_t)
- * cond must be initialized
- * ithread_mutex_t *mutex (must be valid non NULL pointer to ithread_mutex_t)
- * Mutex must be locked.
- * const struct timespec *abstime (absolute time, measured from Jan 1, 1970)
- * Returns:
- * 0 on success. ETIMEDOUT on timeout. Nonzero on failure.
- * See man page for pthread_cond_timedwait
- ***************************************************************************/
-
- #define ithread_cond_timedwait pthread_cond_timedwait
-
- /****************************************************************************
- * Function: ithread_cond_destroy
- *
- * Description:
- * Releases any resources held by the condition variable.
- * Condition variable can no longer be used after this call.
- * Parameters:
- * ithread_cond_t *cond (must be valid non NULL pointer to
- * ithread_cond_t)
- * cond must be initialized.
- * Returns:
- * 0 on success. Nonzero on failure.
- * See man page for pthread_cond_destroy
- ***************************************************************************/
- #define ithread_cond_destroy pthread_cond_destroy
- /****************************************************************************
- * Function: ithread_attr_init
- *
- * Description:
- * Initialises thread attribute object.
- * Parameters:
- * ithread_attr_t *attr (must be valid non NULL pointer to
- * ithread_attr_t)
- * Returns:
- * 0 on success. Nonzero on failure.
- * See man page for pthread_attr_init
- ***************************************************************************/
- #define ithread_attr_init pthread_attr_init
- /****************************************************************************
- * Function: ithread_attr_destroy
- *
- * Description:
- * Destroys thread attribute object.
- * Parameters:
- * ithread_attr_t *attr (must be valid non NULL pointer to
- * ithread_attr_t)
- * Returns:
- * 0 on success. Nonzero on failure.
- * See man page for pthread_attr_destroy
- ***************************************************************************/
- #define ithread_attr_destroy pthread_attr_destroy
- /****************************************************************************
- * Function: ithread_attr_setstacksize
- *
- * Description:
- * Sets stack size of a thread attribute object.
- * Parameters:
- * ithread_attr_t *attr (must be valid non NULL pointer to
- * ithread_attr_t)
- * size_t stacksize (value of stacksize must be greater than
- * ITHREAD_STACK_MIN and lower than system-imposed limits
- * Returns:
- * 0 on success. Nonzero on failure.
- * See man page for pthread_attr_setstacksize
- ***************************************************************************/
- #define ithread_attr_setstacksize pthread_attr_setstacksize
- /****************************************************************************
- * Function: ithread_attr_setdetachstate
- *
- * Description:
- * Sets detach state of a thread attribute object.
- * Parameters:
- * ithread_attr_t *attr (must be valid non NULL pointer to
- * ithread_attr_t)
- * int detachstate (value of detachstate must be ITHREAD_CREATE_DETACHED
- * or ITHREAD_CREATE_JOINABLE)
- * Returns:
- * 0 on success. Nonzero on failure.
- * See man page for pthread_attr_setdetachstate
- ***************************************************************************/
- #define ithread_attr_setdetachstate pthread_attr_setdetachstate
- /****************************************************************************
- * Function: ithread_create
- *
- * Description:
- * Creates a thread with the given start routine
- * and argument.
- * Parameters:
- * ithread_t * thread (must be valid non NULL pointer to pthread_t)
- * ithread_attr_t *attr
- * void * (start_routine) (void *arg) (start routine)
- * void * arg - argument.
- * Returns:
- * 0 on success. Nonzero on failure.
- * Returns EAGAIN if a new thread can not be created.
- * Returns EINVAL if there is a problem with the arguments.
- * See man page fore pthread_create
- ***************************************************************************/
- #define ithread_create pthread_create
- /****************************************************************************
- * Function: ithread_cancel
- *
- * Description:
- * Cancels a thread.
- * Parameters:
- * ithread_t * thread (must be valid non NULL pointer to ithread_t)
- * Returns:
- * 0 on success. Nonzero on failure.
- * See man page for pthread_cancel
- ***************************************************************************/
- #define ithread_cancel pthread_cancel
-
- /****************************************************************************
- * Function: ithread_exit
- *
- * Description:
- * Returns a return code from a thread.
- * Implicitly called when the start routine returns.
- * Parameters:
- * void * return_code return code to return
- * See man page for pthread_exit
- ***************************************************************************/
- #define ithread_exit pthread_exit
- /****************************************************************************
- * Function: ithread_get_current_thread_id
- *
- * Description:
- * Returns the handle of the currently running thread.
- * Returns:
- * The handle of the currently running thread.
- * See man page for pthread_self
- ***************************************************************************/
- #define ithread_get_current_thread_id pthread_self
- /****************************************************************************
- * Function: ithread_self
- *
- * Description:
- * Returns the handle of the currently running thread.
- * Returns:
- * The handle of the currently running thread.
- * See man page for pthread_self
- ***************************************************************************/
- #define ithread_self pthread_self
- /****************************************************************************
- * Function: ithread_detach
- *
- * Description:
- * Makes a thread's resources reclaimed immediately
- * after it finishes
- * execution.
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for pthread_detach
- ***************************************************************************/
- #define ithread_detach pthread_detach
- /****************************************************************************
- * Function: ithread_join
- *
- * Description:
- * Suspends the currently running thread until the
- * specified thread
- * has finished.
- * Returns the return code of the thread, or ITHREAD_CANCELED
- * if the thread has been canceled.
- * Parameters:
- * ithread_t *thread (valid non null thread identifier)
- * void ** return (space for return code)
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for pthread_join
- ***************************************************************************/
- #define ithread_join pthread_join
-
- /****************************************************************************
- * Function: isleep
- *
- * Description:
- * Suspends the currently running thread for the specified number
- * of seconds
- * Always returns 0.
- * Parameters:
- * unsigned int seconds - number of seconds to sleep.
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for sleep (man 3 sleep)
- *****************************************************************************/
- #ifdef WIN32
- #define isleep(x) Sleep((x)*1000)
- #else
- #define isleep sleep
- #endif
- /****************************************************************************
- * Function: isleep
- *
- * Description:
- * Suspends the currently running thread for the specified number
- * of milliseconds
- * Always returns 0.
- * Parameters:
- * unsigned int milliseconds - number of milliseconds to sleep.
- * Returns:
- * 0 on success, Nonzero on failure.
- * See man page for sleep (man 3 sleep)
- *****************************************************************************/
- #ifdef WIN32
- #define imillisleep Sleep
- #else
- #define imillisleep(x) usleep(1000*x)
- #endif
- #if !defined(PTHREAD_MUTEX_RECURSIVE) && !defined(__DragonFly__) && !defined(UPNP_USE_MSVCPP)
- /* !defined(UPNP_USE_MSVCPP) should probably also have pthreads version check - but it's not clear if that is possible */
- /* NK: Added for satisfying the gcc compiler */
- EXPORT_SPEC int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind);
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* ITHREAD_H */
|