~ubuntu-branches/ubuntu/feisty/apache2/feisty

« back to all changes in this revision

Viewing changes to srclib/apr/include/apr_mmap.h

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Barth
  • Date: 2006-12-09 21:05:45 UTC
  • mfrom: (0.6.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20061209210545-h70s0xaqc2v8vqr2
Tags: 2.2.3-3.2
* Non-maintainer upload.
* 043_ajp_connection_reuse: Patch from upstream Bugzilla, fixing a critical
  issue with regard to connection reuse in mod_proxy_ajp.
  Closes: #396265

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
 
2
 * applicable.
 
3
 *
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * 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_MMAP_H
 
18
#define APR_MMAP_H
 
19
 
 
20
/**
 
21
 * @file apr_mmap.h
 
22
 * @brief APR MMAP routines
 
23
 */
 
24
 
 
25
#include "apr.h"
 
26
#include "apr_pools.h"
 
27
#include "apr_errno.h"
 
28
#include "apr_ring.h"
 
29
#include "apr_file_io.h"        /* for apr_file_t */
 
30
 
 
31
#ifdef BEOS
 
32
#include <kernel/OS.h>
 
33
#endif
 
34
 
 
35
#ifdef __cplusplus
 
36
extern "C" {
 
37
#endif /* __cplusplus */
 
38
 
 
39
/**
 
40
 * @defgroup apr_mmap MMAP (Memory Map) Routines
 
41
 * @ingroup APR 
 
42
 * @{
 
43
 */
 
44
 
 
45
/** MMap opened for reading */
 
46
#define APR_MMAP_READ    1
 
47
/** MMap opened for writing */
 
48
#define APR_MMAP_WRITE   2
 
49
 
 
50
/** @see apr_mmap_t */
 
51
typedef struct apr_mmap_t            apr_mmap_t;
 
52
 
 
53
/**
 
54
 * @remark
 
55
 * As far as I can tell the only really sane way to store an MMAP is as a
 
56
 * void * and a length.  BeOS requires this area_id, but that's just a little
 
57
 * something extra.  I am exposing this type, because it doesn't make much
 
58
 * sense to keep it private, and opening it up makes some stuff easier in
 
59
 * Apache.
 
60
 */
 
61
/** The MMAP structure */
 
62
struct apr_mmap_t {
 
63
    /** The pool the mmap structure was allocated out of. */
 
64
    apr_pool_t *cntxt;
 
65
#ifdef BEOS
 
66
    /** An area ID.  Only valid on BeOS */
 
67
    area_id area;
 
68
#endif
 
69
#ifdef WIN32
 
70
    /** The handle of the file mapping */
 
71
    HANDLE mhandle;
 
72
    /** The start of the real memory page area (mapped view) */
 
73
    void *mv;
 
74
    /** The physical start, size and offset */
 
75
    apr_off_t  pstart;
 
76
    apr_size_t psize;
 
77
    apr_off_t  poffset;
 
78
#endif
 
79
    /** The start of the memory mapped area */
 
80
    void *mm;
 
81
    /** The amount of data in the mmap */
 
82
    apr_size_t size;
 
83
    /** ring of apr_mmap_t's that reference the same
 
84
     * mmap'ed region; acts in place of a reference count */
 
85
    APR_RING_ENTRY(apr_mmap_t) link;
 
86
};
 
87
 
 
88
#if APR_HAS_MMAP || defined(DOXYGEN)
 
89
 
 
90
/** @def APR_MMAP_THRESHOLD 
 
91
 * Files have to be at least this big before they're mmap()d.  This is to deal
 
92
 * with systems where the expense of doing an mmap() and an munmap() outweighs
 
93
 * the benefit for small files.  It shouldn't be set lower than 1.
 
94
 */
 
95
#ifdef MMAP_THRESHOLD
 
96
#  define APR_MMAP_THRESHOLD              MMAP_THRESHOLD
 
97
#else
 
98
#  ifdef SUNOS4
 
99
#    define APR_MMAP_THRESHOLD            (8*1024)
 
100
#  else
 
101
#    define APR_MMAP_THRESHOLD            1
 
102
#  endif /* SUNOS4 */
 
103
#endif /* MMAP_THRESHOLD */
 
104
 
 
105
/** @def APR_MMAP_LIMIT
 
106
 * Maximum size of MMap region
 
107
 */
 
108
#ifdef MMAP_LIMIT
 
109
#  define APR_MMAP_LIMIT                  MMAP_LIMIT
 
110
#else
 
111
#  define APR_MMAP_LIMIT                  (4*1024*1024)
 
112
#endif /* MMAP_LIMIT */
 
113
 
 
114
/** Can this file be MMaped */
 
115
#define APR_MMAP_CANDIDATE(filelength) \
 
116
    ((filelength >= APR_MMAP_THRESHOLD) && (filelength < APR_MMAP_LIMIT))
 
117
 
 
118
/*   Function definitions */
 
119
 
 
120
/** 
 
121
 * Create a new mmap'ed file out of an existing APR file.
 
122
 * @param newmmap The newly created mmap'ed file.
 
123
 * @param file The file turn into an mmap.
 
124
 * @param offset The offset into the file to start the data pointer at.
 
125
 * @param size The size of the file
 
126
 * @param flag bit-wise or of:
 
127
 * <PRE>
 
128
 *          APR_MMAP_READ       MMap opened for reading
 
129
 *          APR_MMAP_WRITE      MMap opened for writing
 
130
 * </PRE>
 
131
 * @param cntxt The pool to use when creating the mmap.
 
132
 */
 
133
APR_DECLARE(apr_status_t) apr_mmap_create(apr_mmap_t **newmmap, 
 
134
                                          apr_file_t *file, apr_off_t offset,
 
135
                                          apr_size_t size, apr_int32_t flag,
 
136
                                          apr_pool_t *cntxt);
 
137
 
 
138
/**
 
139
 * Duplicate the specified MMAP.
 
140
 * @param new_mmap The structure to duplicate into. 
 
141
 * @param old_mmap The mmap to duplicate.
 
142
 * @param p The pool to use for new_mmap.
 
143
 */         
 
144
APR_DECLARE(apr_status_t) apr_mmap_dup(apr_mmap_t **new_mmap,
 
145
                                       apr_mmap_t *old_mmap,
 
146
                                       apr_pool_t *p);
 
147
 
 
148
/**
 
149
 * Remove a mmap'ed.
 
150
 * @param mm The mmap'ed file.
 
151
 */
 
152
APR_DECLARE(apr_status_t) apr_mmap_delete(apr_mmap_t *mm);
 
153
 
 
154
/** 
 
155
 * Move the pointer into the mmap'ed file to the specified offset.
 
156
 * @param addr The pointer to the offset specified.
 
157
 * @param mm The mmap'ed file.
 
158
 * @param offset The offset to move to.
 
159
 */
 
160
APR_DECLARE(apr_status_t) apr_mmap_offset(void **addr, apr_mmap_t *mm, 
 
161
                                          apr_off_t offset);
 
162
 
 
163
#endif /* APR_HAS_MMAP */
 
164
 
 
165
/** @} */
 
166
 
 
167
#ifdef __cplusplus
 
168
}
 
169
#endif
 
170
 
 
171
#endif  /* ! APR_MMAP_H */