/home/oden/RPM/BUILD/apr-util-0.9.4/include/apr_anylock.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020
#ifndef APR_ANYLOCK_H
00021
#define APR_ANYLOCK_H
00022
00023
#include "apr_proc_mutex.h"
00024
#include "apr_thread_mutex.h"
00025
#include "apr_thread_rwlock.h"
00026
00028 typedef struct apr_anylock_t {
00030 enum tm_lock {
00031
apr_anylock_none,
00032
apr_anylock_procmutex,
00033
apr_anylock_threadmutex,
00034
apr_anylock_readlock,
00035
apr_anylock_writelock
00036 } type;
00038 union apr_anylock_u_t {
00039 apr_proc_mutex_t *
pm;
00040
#if APR_HAS_THREADS
00041 apr_thread_mutex_t *
tm;
00042 apr_thread_rwlock_t *
rw;
00043
#endif
00044
}
lock;
00045 }
apr_anylock_t;
00046
00047
#if APR_HAS_THREADS
00048
00050 #define APR_ANYLOCK_LOCK(lck) \
00051
(((lck)->type == apr_anylock_none) \
00052
? APR_SUCCESS \
00053
: (((lck)->type == apr_anylock_threadmutex) \
00054
? apr_thread_mutex_lock((lck)->lock.tm) \
00055
: (((lck)->type == apr_anylock_procmutex) \
00056
? apr_proc_mutex_lock((lck)->lock.pm) \
00057
: (((lck)->type == apr_anylock_readlock) \
00058
? apr_thread_rwlock_rdlock((lck)->lock.rw) \
00059
: (((lck)->type == apr_anylock_writelock) \
00060
? apr_thread_rwlock_wrlock((lck)->lock.rw) \
00061
: APR_EINVAL)))))
00062
00063
#else
00064
00065
#define APR_ANYLOCK_LOCK(lck) \
00066
(((lck)->type == apr_anylock_none) \
00067
? APR_SUCCESS \
00068
: (((lck)->type == apr_anylock_procmutex) \
00069
? apr_proc_mutex_lock((lck)->lock.pm) \
00070
: APR_EINVAL))
00071
00072
#endif
00073
00074
#if APR_HAS_THREADS
00075
00077 #define APR_ANYLOCK_TRYLOCK(lck) \
00078
(((lck)->type == apr_anylock_none) \
00079
? APR_SUCCESS \
00080
: (((lck)->type == apr_anylock_threadmutex) \
00081
? apr_thread_mutex_trylock((lck)->lock.tm) \
00082
: (((lck)->type == apr_anylock_procmutex) \
00083
? apr_proc_mutex_trylock((lck)->lock.pm) \
00084
: (((lck)->type == apr_anylock_readlock) \
00085
? apr_thread_rwlock_tryrdlock((lck)->lock.rw) \
00086
: (((lck)->type == apr_anylock_writelock) \
00087
? apr_thread_rwlock_trywrlock((lck)->lock.rw) \
00088
: APR_EINVAL)))))
00089
00090
#else
00091
00092
#define APR_ANYLOCK_TRYLOCK(lck) \
00093
(((lck)->type == apr_anylock_none) \
00094
? APR_SUCCESS \
00095
: (((lck)->type == apr_anylock_procmutex) \
00096
? apr_proc_mutex_trylock((lck)->lock.pm) \
00097
: APR_EINVAL))
00098
00099
#endif
00100
00101
#if APR_HAS_THREADS
00102
00104 #define APR_ANYLOCK_UNLOCK(lck) \
00105
(((lck)->type == apr_anylock_none) \
00106
? APR_SUCCESS \
00107
: (((lck)->type == apr_anylock_threadmutex) \
00108
? apr_thread_mutex_unlock((lck)->lock.tm) \
00109
: (((lck)->type == apr_anylock_procmutex) \
00110
? apr_proc_mutex_unlock((lck)->lock.pm) \
00111
: ((((lck)->type == apr_anylock_readlock) || \
00112
((lck)->type == apr_anylock_writelock)) \
00113
? apr_thread_rwlock_unlock((lck)->lock.rw) \
00114
: APR_EINVAL))))
00115
00116
#else
00117
00118
#define APR_ANYLOCK_UNLOCK(lck) \
00119
(((lck)->type == apr_anylock_none) \
00120
? APR_SUCCESS \
00121
: (((lck)->type == apr_anylock_procmutex) \
00122
? apr_proc_mutex_unlock((lck)->lock.pm) \
00123
: APR_EINVAL))
00124
00125
#endif
00126
00127
#endif
Generated on Wed Sep 15 18:51:15 2004 for Apache Portable Runtime Utility Library by
1.3.7