~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/apr/src/include/apr_proc_mutex.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Licensed to the Apache Software Foundation (ASF) under one or more
2
 
 * contributor license agreements.  See the NOTICE file distributed with
3
 
 * this work for additional information regarding copyright ownership.
4
 
 * The ASF licenses this file to You under the Apache License, Version 2.0
5
 
 * (the "License"); you may not use this file except in compliance with
6
 
 * the License.  You may obtain a copy of the License at
7
 
 *
8
 
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 
 *
10
 
 * Unless required by applicable law or agreed to in writing, software
11
 
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 
 * See the License for the specific language governing permissions and
14
 
 * limitations under the License.
15
 
 */
16
 
 
17
 
#ifndef APR_PROC_MUTEX_H
18
 
#define APR_PROC_MUTEX_H
19
 
 
20
 
/**
21
 
 * @file apr_proc_mutex.h
22
 
 * @brief APR Process Locking Routines
23
 
 */
24
 
 
25
 
#include "apr.h"
26
 
#include "apr_pools.h"
27
 
#include "apr_errno.h"
28
 
 
29
 
#ifdef __cplusplus
30
 
extern "C" {
31
 
#endif /* __cplusplus */
32
 
 
33
 
/**
34
 
 * @defgroup apr_proc_mutex Process Locking Routines
35
 
 * @ingroup APR 
36
 
 * @{
37
 
 */
38
 
 
39
 
/** 
40
 
 * Enumerated potential types for APR process locking methods
41
 
 * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
42
 
 *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
43
 
 */
44
 
typedef enum {
45
 
    APR_LOCK_FCNTL,         /**< fcntl() */
46
 
    APR_LOCK_FLOCK,         /**< flock() */
47
 
    APR_LOCK_SYSVSEM,       /**< System V Semaphores */
48
 
    APR_LOCK_PROC_PTHREAD,  /**< POSIX pthread process-based locking */
49
 
    APR_LOCK_POSIXSEM,      /**< POSIX semaphore process-based locking */
50
 
    APR_LOCK_DEFAULT        /**< Use the default process lock */
51
 
} apr_lockmech_e;
52
 
 
53
 
/** Opaque structure representing a process mutex. */
54
 
typedef struct apr_proc_mutex_t apr_proc_mutex_t;
55
 
 
56
 
/*   Function definitions */
57
 
 
58
 
/**
59
 
 * Create and initialize a mutex that can be used to synchronize processes.
60
 
 * @param mutex the memory address where the newly created mutex will be
61
 
 *        stored.
62
 
 * @param fname A file name to use if the lock mechanism requires one.  This
63
 
 *        argument should always be provided.  The lock code itself will
64
 
 *        determine if it should be used.
65
 
 * @param mech The mechanism to use for the interprocess lock, if any; one of
66
 
 * <PRE>
67
 
 *            APR_LOCK_FCNTL
68
 
 *            APR_LOCK_FLOCK
69
 
 *            APR_LOCK_SYSVSEM
70
 
 *            APR_LOCK_POSIXSEM
71
 
 *            APR_LOCK_PROC_PTHREAD
72
 
 *            APR_LOCK_DEFAULT     pick the default mechanism for the platform
73
 
 * </PRE>
74
 
 * @param pool the pool from which to allocate the mutex.
75
 
 * @see apr_lockmech_e
76
 
 * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports
77
 
 *          APR_LOCK_foo.  Only APR_LOCK_DEFAULT is portable.
78
 
 */
79
 
APR_DECLARE(apr_status_t) apr_proc_mutex_create(apr_proc_mutex_t **mutex,
80
 
                                                const char *fname,
81
 
                                                apr_lockmech_e mech,
82
 
                                                apr_pool_t *pool);
83
 
 
84
 
/**
85
 
 * Re-open a mutex in a child process.
86
 
 * @param mutex The newly re-opened mutex structure.
87
 
 * @param fname A file name to use if the mutex mechanism requires one.  This
88
 
 *              argument should always be provided.  The mutex code itself will
89
 
 *              determine if it should be used.  This filename should be the 
90
 
 *              same one that was passed to apr_proc_mutex_create().
91
 
 * @param pool The pool to operate on.
92
 
 * @remark This function must be called to maintain portability, even
93
 
 *         if the underlying lock mechanism does not require it.
94
 
 */
95
 
APR_DECLARE(apr_status_t) apr_proc_mutex_child_init(apr_proc_mutex_t **mutex,
96
 
                                                    const char *fname,
97
 
                                                    apr_pool_t *pool);
98
 
 
99
 
/**
100
 
 * Acquire the lock for the given mutex. If the mutex is already locked,
101
 
 * the current thread will be put to sleep until the lock becomes available.
102
 
 * @param mutex the mutex on which to acquire the lock.
103
 
 */
104
 
APR_DECLARE(apr_status_t) apr_proc_mutex_lock(apr_proc_mutex_t *mutex);
105
 
 
106
 
/**
107
 
 * Attempt to acquire the lock for the given mutex. If the mutex has already
108
 
 * been acquired, the call returns immediately with APR_EBUSY. Note: it
109
 
 * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
110
 
 * if the return value was APR_EBUSY, for portability reasons.
111
 
 * @param mutex the mutex on which to attempt the lock acquiring.
112
 
 */
113
 
APR_DECLARE(apr_status_t) apr_proc_mutex_trylock(apr_proc_mutex_t *mutex);
114
 
 
115
 
/**
116
 
 * Release the lock for the given mutex.
117
 
 * @param mutex the mutex from which to release the lock.
118
 
 */
119
 
APR_DECLARE(apr_status_t) apr_proc_mutex_unlock(apr_proc_mutex_t *mutex);
120
 
 
121
 
/**
122
 
 * Destroy the mutex and free the memory associated with the lock.
123
 
 * @param mutex the mutex to destroy.
124
 
 */
125
 
APR_DECLARE(apr_status_t) apr_proc_mutex_destroy(apr_proc_mutex_t *mutex);
126
 
 
127
 
/**
128
 
 * Destroy the mutex and free the memory associated with the lock.
129
 
 * @param mutex the mutex to destroy.
130
 
 * @note This function is generally used to kill a cleanup on an already
131
 
 *       created mutex
132
 
 */
133
 
APR_DECLARE(apr_status_t) apr_proc_mutex_cleanup(void *mutex);
134
 
 
135
 
/**
136
 
 * Return the name of the lockfile for the mutex, or NULL
137
 
 * if the mutex doesn't use a lock file
138
 
 */
139
 
 
140
 
APR_DECLARE(const char *) apr_proc_mutex_lockfile(apr_proc_mutex_t *mutex);
141
 
 
142
 
/**
143
 
 * Display the name of the mutex, as it relates to the actual method used.
144
 
 * This matches the valid options for Apache's AcceptMutex directive
145
 
 * @param mutex the name of the mutex
146
 
 */
147
 
APR_DECLARE(const char *) apr_proc_mutex_name(apr_proc_mutex_t *mutex);
148
 
 
149
 
/**
150
 
 * Display the name of the default mutex: APR_LOCK_DEFAULT
151
 
 */
152
 
APR_DECLARE(const char *) apr_proc_mutex_defname(void);
153
 
 
154
 
/**
155
 
 * Get the pool used by this proc_mutex.
156
 
 * @return apr_pool_t the pool
157
 
 */
158
 
APR_POOL_DECLARE_ACCESSOR(proc_mutex);
159
 
 
160
 
/** @} */
161
 
 
162
 
#ifdef __cplusplus
163
 
}
164
 
#endif
165
 
 
166
 
#endif  /* ! APR_PROC_MUTEX_H */