00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef APR_POOLS_H
00017 #define APR_POOLS_H
00018
00036 #include "apr.h"
00037 #include "apr_errno.h"
00038 #include "apr_general.h"
00039 #define APR_WANT_MEMFUNC
00040 #include "apr_want.h"
00041
00042 #ifdef __cplusplus
00043 extern "C" {
00044 #endif
00045
00053 typedef struct apr_pool_t apr_pool_t;
00054
00055
00074 #define APR_POOL_DECLARE_ACCESSOR(type) \
00075 APR_DECLARE(apr_pool_t *) apr_##type##_pool_get \
00076 (const apr_##type##_t *the##type)
00077
00084 #define APR_POOL_IMPLEMENT_ACCESSOR(type) \
00085 APR_DECLARE(apr_pool_t *) apr_##type##_pool_get \
00086 (const apr_##type##_t *the##type) \
00087 { return the##type->pool; }
00088
00089
00125 #if defined(APR_POOL_DEBUG)
00126 #if (APR_POOL_DEBUG != 0) && (APR_POOL_DEBUG - 0 == 0)
00127 #undef APR_POOL_DEBUG
00128 #define APR_POOL_DEBUG 1
00129 #endif
00130 #else
00131 #define APR_POOL_DEBUG 0
00132 #endif
00133
00135 #define APR_POOL__FILE_LINE__ __FILE__ ":" APR_STRINGIFY(__LINE__)
00136
00137
00138
00140 typedef int (*apr_abortfunc_t)(int retcode);
00141
00142
00143
00144
00145
00146
00147
00148
00149
00156 APR_DECLARE(apr_status_t) apr_pool_initialize(void);
00157
00164 APR_DECLARE(void) apr_pool_terminate(void);
00165
00166
00167
00168
00169
00170
00171 #include "apr_allocator.h"
00172
00184 APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool,
00185 apr_pool_t *parent,
00186 apr_abortfunc_t abort_fn,
00187 apr_allocator_t *allocator);
00188
00205 APR_DECLARE(apr_status_t) apr_pool_create_ex_debug(apr_pool_t **newpool,
00206 apr_pool_t *parent,
00207 apr_abortfunc_t abort_fn,
00208 apr_allocator_t *allocator,
00209 const char *file_line);
00210
00211 #if APR_POOL_DEBUG
00212 #define apr_pool_create_ex(newpool, parent, abort_fn, allocator) \
00213 apr_pool_create_ex_debug(newpool, parent, abort_fn, allocator, \
00214 APR_POOL__FILE_LINE__)
00215 #endif
00216
00225 #if defined(DOXYGEN)
00226 APR_DECLARE(apr_status_t) apr_pool_create(apr_pool_t **newpool,
00227 apr_pool_t *parent);
00228 #else
00229 #if APR_POOL_DEBUG
00230 #define apr_pool_create(newpool, parent) \
00231 apr_pool_create_ex_debug(newpool, parent, NULL, NULL, \
00232 APR_POOL__FILE_LINE__)
00233 #else
00234 #define apr_pool_create(newpool, parent) \
00235 apr_pool_create_ex(newpool, parent, NULL, NULL)
00236 #endif
00237 #endif
00238
00240 #if APR_POOL_DEBUG
00241 #define apr_pool_sub_make(newpool, parent, abort_fn) \
00242 (void)apr_pool_create_ex_debug(newpool, parent, abort_fn, \
00243 NULL, \
00244 APR_POOL__FILE_LINE__)
00245 #else
00246 #define apr_pool_sub_make(newpool, parent, abort_fn) \
00247 (void)apr_pool_create_ex(newpool, parent, abort_fn, NULL)
00248 #endif
00249
00254 APR_DECLARE(apr_allocator_t *) apr_pool_allocator_get(apr_pool_t *pool);
00255
00264 APR_DECLARE(void) apr_pool_clear(apr_pool_t *p);
00265
00279 APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *p,
00280 const char *file_line);
00281
00282 #if APR_POOL_DEBUG
00283 #define apr_pool_clear(p) \
00284 apr_pool_clear_debug(p, APR_POOL__FILE_LINE__)
00285 #endif
00286
00293 APR_DECLARE(void) apr_pool_destroy(apr_pool_t *p);
00294
00308 APR_DECLARE(void) apr_pool_destroy_debug(apr_pool_t *p,
00309 const char *file_line);
00310
00311 #if APR_POOL_DEBUG
00312 #define apr_pool_destroy(p) \
00313 apr_pool_destroy_debug(p, APR_POOL__FILE_LINE__)
00314 #endif
00315
00316
00317
00318
00319
00320
00327 APR_DECLARE(void *) apr_palloc(apr_pool_t *p, apr_size_t size);
00328
00337 APR_DECLARE(void *) apr_palloc_debug(apr_pool_t *p, apr_size_t size,
00338 const char *file_line);
00339
00340 #if APR_POOL_DEBUG
00341 #define apr_palloc(p, size) \
00342 apr_palloc_debug(p, size, APR_POOL__FILE_LINE__)
00343 #endif
00344
00351 #if defined(DOXYGEN)
00352 APR_DECLARE(void *) apr_pcalloc(apr_pool_t *p, apr_size_t size);
00353 #elif !APR_POOL_DEBUG
00354 #define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
00355 #endif
00356
00365 APR_DECLARE(void *) apr_pcalloc_debug(apr_pool_t *p, apr_size_t size,
00366 const char *file_line);
00367
00368 #if APR_POOL_DEBUG
00369 #define apr_pcalloc(p, size) \
00370 apr_pcalloc_debug(p, size, APR_POOL__FILE_LINE__)
00371 #endif
00372
00373
00374
00375
00376
00377
00386 APR_DECLARE(void) apr_pool_abort_set(apr_abortfunc_t abortfunc,
00387 apr_pool_t *pool);
00388
00390 APR_DECLARE(void) apr_pool_set_abort(apr_abortfunc_t abortfunc,
00391 apr_pool_t *pool);
00392
00398 APR_DECLARE(apr_abortfunc_t) apr_pool_abort_get(apr_pool_t *pool);
00399
00401 APR_DECLARE(apr_abortfunc_t) apr_pool_get_abort(apr_pool_t *pool);
00402
00408 APR_DECLARE(apr_pool_t *) apr_pool_parent_get(apr_pool_t *pool);
00409
00411 APR_DECLARE(apr_pool_t *) apr_pool_get_parent(apr_pool_t *pool);
00412
00420 APR_DECLARE(int) apr_pool_is_ancestor(apr_pool_t *a, apr_pool_t *b);
00421
00427 APR_DECLARE(void) apr_pool_tag(apr_pool_t *pool, const char *tag);
00428
00429
00430
00431
00432
00433
00452 APR_DECLARE(apr_status_t) apr_pool_userdata_set(
00453 const void *data,
00454 const char *key,
00455 apr_status_t (*cleanup)(void *),
00456 apr_pool_t *pool);
00457
00477 APR_DECLARE(apr_status_t) apr_pool_userdata_setn(
00478 const void *data,
00479 const char *key,
00480 apr_status_t (*cleanup)(void *),
00481 apr_pool_t *pool);
00482
00489 APR_DECLARE(apr_status_t) apr_pool_userdata_get(void **data, const char *key,
00490 apr_pool_t *pool);
00491
00492
00493
00494
00495
00496
00497
00498
00499
00509 APR_DECLARE(void) apr_pool_cleanup_register(
00510 apr_pool_t *p,
00511 const void *data,
00512 apr_status_t (*plain_cleanup)(void *),
00513 apr_status_t (*child_cleanup)(void *));
00514
00523 APR_DECLARE(void) apr_pool_cleanup_kill(apr_pool_t *p, const void *data,
00524 apr_status_t (*cleanup)(void *));
00525
00533 APR_DECLARE(void) apr_pool_child_cleanup_set(
00534 apr_pool_t *p,
00535 const void *data,
00536 apr_status_t (*plain_cleanup)(void *),
00537 apr_status_t (*child_cleanup)(void *));
00538
00546 APR_DECLARE(apr_status_t) apr_pool_cleanup_run(
00547 apr_pool_t *p,
00548 void *data,
00549 apr_status_t (*cleanup)(void *));
00550
00555 APR_DECLARE_NONSTD(apr_status_t) apr_pool_cleanup_null(void *data);
00556
00557
00558
00559
00564 APR_DECLARE(void) apr_pool_cleanup_for_exec(void);
00565
00566
00611 #if APR_POOL_DEBUG || defined(DOXYGEN)
00612
00617 APR_DECLARE(void) apr_pool_join(apr_pool_t *p, apr_pool_t *sub);
00618
00624 APR_DECLARE(apr_pool_t *) apr_pool_find(const void *mem);
00625
00632 APR_DECLARE(apr_size_t) apr_pool_num_bytes(apr_pool_t *p, int recurse);
00633
00639 APR_DECLARE(void) apr_pool_lock(apr_pool_t *pool, int flag);
00640
00641
00642
00643 #else
00644
00645 #ifdef apr_pool_join
00646 #undef apr_pool_join
00647 #endif
00648 #define apr_pool_join(a,b)
00649
00650 #ifdef apr_pool_lock
00651 #undef apr_pool_lock
00652 #endif
00653 #define apr_pool_lock(pool, lock)
00654
00655 #endif
00656
00659 #ifdef __cplusplus
00660 }
00661 #endif
00662
00663 #endif