You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by jo...@apache.org on 2008/04/08 15:49:54 UTC
svn commit: r645924 - in /httpd/httpd/trunk/modules/cache: ap_socache.h
mod_socache_dbm.c mod_socache_dc.c mod_socache_memcache.c mod_socache_shmcb.c
Author: jorton
Date: Tue Apr 8 06:49:52 2008
New Revision: 645924
URL: http://svn.apache.org/viewvc?rev=645924&view=rev
Log:
* modules/cache/ap_socache.h: Add ap_socache_instance_t object type.
Adjust the provider interface to use this instance type throughout.
* modules/cache/mod_socache_dbm.c,
modules/cache/mod_socache_memcache.c,
modules/cache/mod_socache_shmcb.c,
modules/cache/mod_socache_dc.c: Adjust all implementations to
define the instance object in place of the "struct context", and
to take this object directly in the provider interface.
Modified:
httpd/httpd/trunk/modules/cache/ap_socache.h
httpd/httpd/trunk/modules/cache/mod_socache_dbm.c
httpd/httpd/trunk/modules/cache/mod_socache_dc.c
httpd/httpd/trunk/modules/cache/mod_socache_memcache.c
httpd/httpd/trunk/modules/cache/mod_socache_shmcb.c
Modified: httpd/httpd/trunk/modules/cache/ap_socache.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/ap_socache.h?rev=645924&r1=645923&r2=645924&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/ap_socache.h (original)
+++ httpd/httpd/trunk/modules/cache/ap_socache.h Tue Apr 8 06:49:52 2008
@@ -36,6 +36,9 @@
* serialize access to the provider. */
#define AP_SOCACHE_FLAG_NOTMPSAFE (0x0001)
+/* A cache instance. */
+typedef struct ap_socache_instance_t ap_socache_instance_t;
+
typedef struct ap_socache_provider_t {
/* Canonical provider name: */
const char *name;
@@ -51,17 +54,17 @@
*
* The context pointer returned in *INSTANCE will be passed as the
* first argument to subsequent invocations. */
- const char *(*create)(void **instance, const char *arg,
+ const char *(*create)(ap_socache_instance_t **instance, const char *arg,
apr_pool_t *tmp, apr_pool_t *p);
/* Initialize the cache. Return APR error code. */
- apr_status_t (*init)(void *instance, /* hints, namespace */
+ apr_status_t (*init)(ap_socache_instance_t *instance, /* hints, namespace */
server_rec *s, apr_pool_t *pool);
/* Destroy a given cache context. */
- void (*destroy)(void *instance, server_rec *s);
+ void (*destroy)(ap_socache_instance_t *instance, server_rec *s);
/* Store an object in the cache with key ID of length IDLEN, with
* DATA of length DATALEN. The object expires at abolute time
* EXPIRY. */
- apr_status_t (*store)(void *instance, server_rec *s,
+ apr_status_t (*store)(ap_socache_instance_t *instance, server_rec *s,
const unsigned char *id, unsigned int idlen,
time_t expiry,
unsigned char *data, unsigned int datalen);
@@ -70,17 +73,17 @@
* placed in DEST, which has length on entry of *DESTLEN.
* *DESTLEN must be updated to equal the length of data written on
* exit. */
- apr_status_t (*retrieve)(void *instance, server_rec *s,
+ apr_status_t (*retrieve)(ap_socache_instance_t *instance, server_rec *s,
const unsigned char *id, unsigned int idlen,
unsigned char *data, unsigned int *datalen,
apr_pool_t *pool);
/* Remove an object from the cache with key ID of length IDLEN.
* POOL may be used for temporary allocations. */
- void (*delete)(void *instance, server_rec *s,
+ void (*delete)(ap_socache_instance_t *instance, server_rec *s,
const unsigned char *id, unsigned int idlen,
apr_pool_t *pool);
/* Dump cache status for mod_status output. */
- void (*status)(void *instance, request_rec *r, int flags);
+ void (*status)(ap_socache_instance_t *instance, request_rec *r, int flags);
} ap_socache_provider_t;
/* Cache providers are registered using the ap_provider_* interface,
Modified: httpd/httpd/trunk/modules/cache/mod_socache_dbm.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/mod_socache_dbm.c?rev=645924&r1=645923&r2=645924&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/mod_socache_dbm.c (original)
+++ httpd/httpd/trunk/modules/cache/mod_socache_dbm.c Tue Apr 8 06:49:52 2008
@@ -36,7 +36,7 @@
/* Use of the context structure must be thread-safe after the initial
* create/init; callers must hold the mutex. */
-struct context {
+struct ap_socache_instance_t {
const char *data_file;
/* Pool must only be used with the mutex held. */
apr_pool_t *pool;
@@ -63,18 +63,17 @@
#endif
#endif
+static void socache_dbm_expire(ap_socache_instance_t *ctx, server_rec *s);
-
-static void socache_dbm_expire(struct context *ctx, server_rec *s);
-
-static void socache_dbm_remove(void *context, server_rec *s,
+static void socache_dbm_remove(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
apr_pool_t *p);
-static const char *socache_dbm_create(void **context, const char *arg,
+static const char *socache_dbm_create(ap_socache_instance_t **context,
+ const char *arg,
apr_pool_t *tmp, apr_pool_t *p)
{
- struct context *ctx;
+ ap_socache_instance_t *ctx;
*context = ctx = apr_pcalloc(p, sizeof *ctx);
@@ -88,9 +87,9 @@
return NULL;
}
-static apr_status_t socache_dbm_init(void *context, server_rec *s, apr_pool_t *p)
+static apr_status_t socache_dbm_init(ap_socache_instance_t *ctx,
+ server_rec *s, apr_pool_t *p)
{
- struct context *ctx = context;
apr_dbm_t *dbm;
apr_status_t rv;
@@ -142,10 +141,8 @@
return APR_SUCCESS;
}
-static void socache_dbm_kill(void *context, server_rec *s)
+static void socache_dbm_kill(ap_socache_instance_t *ctx, server_rec *s)
{
- struct context *ctx = context;
-
/* the correct way */
unlink(apr_pstrcat(ctx->pool, ctx->data_file, SSL_DBM_FILE_SUFFIX_DIR, NULL));
unlink(apr_pstrcat(ctx->pool, ctx->data_file, SSL_DBM_FILE_SUFFIX_PAG, NULL));
@@ -158,12 +155,11 @@
return;
}
-static apr_status_t socache_dbm_store(void *context, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- time_t expiry,
- unsigned char *ucaData, unsigned int nData)
+static apr_status_t socache_dbm_store(
+ ap_socache_instance_t *ctx, server_rec *s,
+ const unsigned char *id, unsigned int idlen,
+ time_t expiry, unsigned char *ucaData, unsigned int nData)
{
- struct context *ctx = context;
apr_dbm_t *dbm;
apr_datum_t dbmkey;
apr_datum_t dbmval;
@@ -232,12 +228,12 @@
return APR_SUCCESS;
}
-static apr_status_t socache_dbm_retrieve(void *context, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- unsigned char *dest, unsigned int *destlen,
- apr_pool_t *p)
+static apr_status_t socache_dbm_retrieve(
+ ap_socache_instance_t *ctx, server_rec *s,
+ const unsigned char *id, unsigned int idlen,
+ unsigned char *dest, unsigned int *destlen,
+ apr_pool_t *p)
{
- struct context *ctx = context;
apr_dbm_t *dbm;
apr_datum_t dbmkey;
apr_datum_t dbmval;
@@ -299,11 +295,10 @@
return APR_SUCCESS;
}
-static void socache_dbm_remove(void *context, server_rec *s,
+static void socache_dbm_remove(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
apr_pool_t *p)
{
- struct context *ctx = context;
apr_dbm_t *dbm;
apr_datum_t dbmkey;
apr_status_t rv;
@@ -329,7 +324,7 @@
return;
}
-static void socache_dbm_expire(struct context *ctx, server_rec *s)
+static void socache_dbm_expire(ap_socache_instance_t *ctx, server_rec *s)
{
apr_dbm_t *dbm;
apr_datum_t dbmkey;
@@ -436,9 +431,9 @@
nElements, nElements-nDeleted, nDeleted);
}
-static void socache_dbm_status(void *context, request_rec *r, int flags)
+static void socache_dbm_status(ap_socache_instance_t *ctx, request_rec *r,
+ int flags)
{
- struct context *ctx = context;
apr_dbm_t *dbm;
apr_datum_t dbmkey;
apr_datum_t dbmval;
Modified: httpd/httpd/trunk/modules/cache/mod_socache_dc.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/mod_socache_dc.c?rev=645924&r1=645923&r2=645924&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/mod_socache_dc.c (original)
+++ httpd/httpd/trunk/modules/cache/mod_socache_dc.c Tue Apr 8 06:49:52 2008
@@ -31,17 +31,18 @@
#error "You must compile with a more recent version of the distcache-base package"
#endif
-struct context {
+struct ap_socache_instance_t {
/* Configured target server: */
const char *target;
/* distcache client context: */
DC_CTX *dc;
};
-static const char *socache_dc_create(void **context, const char *arg,
+static const char *socache_dc_create(ap_socache_instance_t **context,
+ const char *arg,
apr_pool_t *tmp, apr_pool_t *p)
{
- struct context *ctx;
+ struct ap_socache_instance_t *ctx;
ctx = *context = apr_palloc(p, sizeof *ctx);
@@ -50,10 +51,8 @@
return NULL;
}
-static apr_status_t socache_dc_init(void *context, server_rec *s, apr_pool_t *p)
+static apr_status_t socache_dc_init(ap_socache_instance_t *ctx, server_rec *s, apr_pool_t *p)
{
- struct context *ctx = ctx;
-
#if 0
/* If a "persistent connection" mode of operation is preferred, you *must*
* also use the PIDCHECK flag to ensure fork()'d processes don't interlace
@@ -80,23 +79,19 @@
return APR_SUCCESS;
}
-static void socache_dc_kill(void *context, server_rec *s)
+static void socache_dc_kill(ap_socache_instance_t *ctx, server_rec *s)
{
- struct context *ctx = context;
-
if (ctx && ctx->dc) {
DC_CTX_free(ctx->dc);
ctx->dc = NULL;
}
}
-static apr_status_t socache_dc_store(void *context, server_rec *s,
+static apr_status_t socache_dc_store(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
time_t timeout,
unsigned char *der, unsigned int der_len)
{
- struct context *ctx = context;
-
/* !@#$%^ - why do we deal with *absolute* time anyway??? */
timeout -= time(NULL);
/* Send the serialised session to the distributed cache context */
@@ -109,13 +104,12 @@
return APR_SUCCESS;
}
-static apr_status_t socache_dc_retrieve(void *context, server_rec *s,
+static apr_status_t socache_dc_retrieve(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
unsigned char *dest, unsigned int *destlen,
apr_pool_t *p)
{
unsigned int data_len;
- struct context *ctx = context;
/* Retrieve any corresponding session from the distributed cache context */
if (!DC_CTX_get_session(ctx->dc, id, idlen, dest, *destlen, &data_len)) {
@@ -131,12 +125,10 @@
return APR_SUCCESS;
}
-static void socache_dc_remove(void *context, server_rec *s,
+static void socache_dc_remove(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
apr_pool_t *p)
{
- struct context *ctx = context;
-
/* Remove any corresponding session from the distributed cache context */
if (!DC_CTX_remove_session(ctx->dc, id, idlen)) {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'remove_session' MISS");
@@ -145,10 +137,8 @@
}
}
-static void socache_dc_status(void *context, request_rec *r, int flags)
+static void socache_dc_status(ap_socache_instance_t *ctx, request_rec *r, int flags)
{
- struct context *ctx = context;
-
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
"distributed scache 'socache_dc_status'");
ap_rprintf(r, "cache type: <b>DC (Distributed Cache)</b>, "
Modified: httpd/httpd/trunk/modules/cache/mod_socache_memcache.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/mod_socache_memcache.c?rev=645924&r1=645923&r2=645924&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/mod_socache_memcache.c (original)
+++ httpd/httpd/trunk/modules/cache/mod_socache_memcache.c Tue Apr 8 06:49:52 2008
@@ -58,15 +58,16 @@
#define MC_DEFAULT_SERVER_TTL 600
#endif
-struct context {
+struct ap_socache_instance_t {
const char *servers;
apr_memcache_t *mc;
};
-static const char *socache_mc_create(void **context, const char *arg,
+static const char *socache_mc_create(ap_socache_instance_t **context,
+ const char *arg,
apr_pool_t *tmp, apr_pool_t *p)
{
- struct context *ctx;
+ ap_socache_instance_t *ctx;
*context = ctx = apr_palloc(p, sizeof *ctx);
@@ -75,7 +76,8 @@
return NULL;
}
-static apr_status_t socache_mc_init(void *context, server_rec *s, apr_pool_t *p)
+static apr_status_t socache_mc_init(ap_socache_instance_t *ctx,
+ server_rec *s, apr_pool_t *p)
{
apr_status_t rv;
int thread_limit = 0;
@@ -83,7 +85,6 @@
char *cache_config;
char *split;
char *tok;
- struct context *ctx = context;
ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
@@ -158,7 +159,7 @@
return APR_SUCCESS;
}
-static void socache_mc_kill(void *context, server_rec *s)
+static void socache_mc_kill(ap_socache_instance_t *context, server_rec *s)
{
/* noop. */
}
@@ -181,12 +182,11 @@
return str;
}
-static apr_status_t socache_mc_store(void *context, server_rec *s,
+static apr_status_t socache_mc_store(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
time_t timeout,
unsigned char *ucaData, unsigned int nData)
{
- struct context *ctx = context;
char buf[MC_KEY_LEN];
char *strkey = NULL;
apr_status_t rv;
@@ -209,12 +209,12 @@
return APR_SUCCESS;
}
-static apr_status_t socache_mc_retrieve(void *context, server_rec *s,
+static apr_status_t socache_mc_retrieve(ap_socache_instance_t *ctx,
+ server_rec *s,
const unsigned char *id, unsigned int idlen,
unsigned char *dest, unsigned int *destlen,
apr_pool_t *p)
{
- struct context *ctx = context;
apr_size_t der_len;
char buf[MC_KEY_LEN], *der;
char *strkey = NULL;
@@ -252,11 +252,10 @@
return APR_SUCCESS;
}
-static void socache_mc_remove(void *context, server_rec *s,
+static void socache_mc_remove(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
apr_pool_t *p)
{
- struct context *ctx = context;
char buf[MC_KEY_LEN];
char* strkey = NULL;
apr_status_t rv;
@@ -277,7 +276,7 @@
}
}
-static void socache_mc_status(void *context, request_rec *r, int flags)
+static void socache_mc_status(ap_socache_instance_t *ctx, request_rec *r, int flags)
{
/* SSLModConfigRec *mc = myModConfig(r->server); */
/* TODO: Make a mod_status handler. meh. */
Modified: httpd/httpd/trunk/modules/cache/mod_socache_shmcb.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cache/mod_socache_shmcb.c?rev=645924&r1=645923&r2=645924&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cache/mod_socache_shmcb.c (original)
+++ httpd/httpd/trunk/modules/cache/mod_socache_shmcb.c Tue Apr 8 06:49:52 2008
@@ -91,7 +91,7 @@
unsigned char removed;
} SHMCBIndex;
-struct context {
+struct ap_socache_instance_t {
const char *data_file;
apr_size_t shm_size;
apr_shm_t *shm;
@@ -259,10 +259,11 @@
* subcache internals are deferred to shmcb_subcache_*** functions lower down
*/
-static const char *socache_shmcb_create(void **context, const char *arg,
+static const char *socache_shmcb_create(ap_socache_instance_t **context,
+ const char *arg,
apr_pool_t *tmp, apr_pool_t *p)
{
- struct context *ctx;
+ ap_socache_instance_t *ctx;
char *path, *cp, *cp2;
/* Allocate the context. */
@@ -300,14 +301,14 @@
return NULL;
}
-static apr_status_t socache_shmcb_init(void *context, server_rec *s, apr_pool_t *p)
+static apr_status_t socache_shmcb_init(ap_socache_instance_t *ctx,
+ server_rec *s, apr_pool_t *p)
{
void *shm_segment;
apr_size_t shm_segsize;
apr_status_t rv;
SHMCBHeader *header;
unsigned int num_subcache, num_idx, loop;
- struct context *ctx = context;
/* Create shared memory segment */
if (ctx->data_file == NULL) {
@@ -420,23 +421,21 @@
return APR_SUCCESS;
}
-static void socache_shmcb_kill(void *context, server_rec *s)
+static void socache_shmcb_kill(ap_socache_instance_t *ctx, server_rec *s)
{
- struct context *ctx = context;
-
if (ctx && ctx->shm) {
apr_shm_destroy(ctx->shm);
ctx->shm = NULL;
}
}
-static apr_status_t socache_shmcb_store(void *context, server_rec *s,
+static apr_status_t socache_shmcb_store(ap_socache_instance_t *ctx,
+ server_rec *s,
const unsigned char *id, unsigned int idlen,
time_t timeout,
unsigned char *encoded,
unsigned int len_encoded)
{
- struct context *ctx = context;
SHMCBHeader *header = ctx->header;
SHMCBSubcache *subcache = SHMCB_MASK(header, id);
@@ -460,12 +459,12 @@
return APR_SUCCESS;
}
-static apr_status_t socache_shmcb_retrieve(void *context, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- unsigned char *dest, unsigned int *destlen,
- apr_pool_t *p)
+static apr_status_t socache_shmcb_retrieve(ap_socache_instance_t *ctx,
+ server_rec *s,
+ const unsigned char *id, unsigned int idlen,
+ unsigned char *dest, unsigned int *destlen,
+ apr_pool_t *p)
{
- struct context *ctx = context;
SHMCBHeader *header = ctx->header;
SHMCBSubcache *subcache = SHMCB_MASK(header, id);
int rv;
@@ -487,11 +486,10 @@
return rv == 0 ? APR_SUCCESS : APR_EGENERAL;
}
-static void socache_shmcb_remove(void *context, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- apr_pool_t *p)
+static void socache_shmcb_remove(ap_socache_instance_t *ctx, server_rec *s,
+ const unsigned char *id, unsigned int idlen,
+ apr_pool_t *p)
{
- struct context *ctx = context;
SHMCBHeader *header = ctx->header;
SHMCBSubcache *subcache = SHMCB_MASK(header, id);
@@ -511,10 +509,10 @@
"leaving socache_shmcb_remove successfully");
}
-static void socache_shmcb_status(void *context, request_rec *r, int flags)
+static void socache_shmcb_status(ap_socache_instance_t *ctx,
+ request_rec *r, int flags)
{
server_rec *s = r->server;
- struct context *ctx = context;
SHMCBHeader *header = ctx->header;
unsigned int loop, total = 0, cache_total = 0, non_empty_subcaches = 0;
time_t idx_expiry, min_expiry = 0, max_expiry = 0, average_expiry = 0;