You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2008/12/30 18:08:24 UTC
svn commit: r730181 - in /httpd/httpd/trunk/modules/mem: mod_slotmem.h
providers/mod_plainmem.c providers/mod_sharedmem.c
Author: jim
Date: Tue Dec 30 09:08:24 2008
New Revision: 730181
URL: http://svn.apache.org/viewvc?rev=730181&view=rev
Log:
And complete the API changes...
Modified:
httpd/httpd/trunk/modules/mem/mod_slotmem.h
httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c
httpd/httpd/trunk/modules/mem/providers/mod_sharedmem.c
Modified: httpd/httpd/trunk/modules/mem/mod_slotmem.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/mem/mod_slotmem.h?rev=730181&r1=730180&r2=730181&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/mem/mod_slotmem.h (original)
+++ httpd/httpd/trunk/modules/mem/mod_slotmem.h Tue Dec 30 09:08:24 2008
@@ -74,7 +74,7 @@
*/
typedef apr_status_t ap_slotmem_callback_fn_t(void* mem, void *data, apr_pool_t *pool);
-struct slotmem_storage_method {
+struct ap_slotmem_storage_method {
/**
* call the callback on all worker slots
* @param s ap_slotmem_t to use.
@@ -83,7 +83,7 @@
* @param pool is pool used to create scoreboard
* @return APR_SUCCESS if all went well
*/
-AP_DECLARE(apr_status_t) (* slotmem)(ap_slotmem_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool);
+apr_status_t (* slotmem_do)(ap_slotmem_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool);
/**
* create a new slotmem with each item size is item_size.
@@ -95,7 +95,7 @@
* @param pool is pool used to create scoreboard
* @return APR_SUCCESS if all went well
*/
-AP_DECLARE(apr_status_t) (* ap_slotmem_create)(ap_slotmem_t **new, const char *name, apr_size_t item_size, int item_num, apr_pool_t *pool);
+apr_status_t (* slotmem_create)(ap_slotmem_t **new, const char *name, apr_size_t item_size, int item_num, apr_pool_t *pool);
/**
* attach to an existing slotmem.
@@ -107,7 +107,7 @@
* @param pool is pool to memory allocate.
* @return APR_SUCCESS if all went well
*/
-AP_DECLARE(apr_status_t) (* ap_slotmem_attach)(ap_slotmem_t **new, const char *name, apr_size_t *item_size, int *item_num, apr_pool_t *pool);
+apr_status_t (* slotmem_attach)(ap_slotmem_t **new, const char *name, apr_size_t *item_size, int *item_num, apr_pool_t *pool);
/**
* get the memory associated with this worker slot.
* @param s ap_slotmem_t to use.
@@ -115,23 +115,94 @@
* @param mem address to store the pointer to the slot
* @return APR_SUCCESS if all went well
*/
-AP_DECLARE(apr_status_t) (* ap_slotmem_mem)(ap_slotmem_t *s, int item_id, void**mem);
+apr_status_t (* slotmem_mem)(ap_slotmem_t *s, int item_id, void**mem);
/**
* lock the memory segment
* NOTE: All slots share the same mutex
* @param s ap_slotmem_t to use
* @return APR_SUCCESS if all went well
*/
-AP_DECLARE(apr_status_t) (* ap_slotmem_lock)(ap_slotmem_t *s);
+apr_status_t (* slotmem_lock)(ap_slotmem_t *s);
/**
* unlock the memory segment
* NOTE: All slots share the same mutex
* @param s ap_slotmem_t to use.
* @return APR_SUCCESS if all went well
*/
-AP_DECLARE(apr_status_t) (* ap_slotmem_unlock)(ap_slotmem_t *s);
+apr_status_t (* slotmem_unlock)(ap_slotmem_t *s);
};
-typedef struct slotmem_storage_method slotmem_storage_method;
+typedef struct ap_slotmem_storage_method ap_slotmem_storage_method;
+
+/*
+ * mod_slotmem externals exposed to the outside world.
+ * Thus the provider nature of mod_slotmem is somewhat insulated
+ * from the end user but can still be used directed if need
+ * be. The rationale is to make it easier for additional
+ * memory providers to be provided and having a single
+ * simple interface for all
+ */
+/**
+ * obtain the provider method desired
+ * @param provider is name of the provider to use
+ * @return pointer to provider or NULL
+ */
+AP_DECLARE(ap_slotmem_storage_method *) ap_slotmem_method(const char *provider);
+/**
+ * call the callback on all worker slots
+ * @param sm ap_slotmem_storage_method provider obtained
+ * @param s ap_slotmem_t to use.
+ * @param funct callback function to call for each element.
+ * @param data parameter for the callback function.
+ * @param pool is pool used to create scoreboard
+ * @return APR_SUCCESS if all went well
+ */
+AP_DECLARE(apr_status_t) ap_slotmem_do(ap_slotmem_storage_method *sm, ap_slotmem_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool);
+
+/**
+ * create a new slotmem with each item size is item_size.
+ * This would create shared memory, basically.
+ * @param pointer to store the address of the scoreboard.
+ * @param name is a key used for debugging and in mod_status output or allow another process to share this space.
+ * @param item_size size of each item
+ * @param item_num number of item to create.
+ * @param pool is pool used to create scoreboard
+ * @return APR_SUCCESS if all went well
+ */
+AP_DECLARE(apr_status_t) ap_slotmem_create(ap_slotmem_storage_method *sm, ap_slotmem_t **new, const char *name, apr_size_t item_size, int item_num, apr_pool_t *pool);
+
+/**
+ * attach to an existing slotmem.
+ * This would attach to shared memory, basically.
+ * @param pointer to store the address of the scoreboard.
+ * @param name is a key used for debugging and in mod_status output or allow another process to share this space.
+ * @param item_size size of each item
+ * @param item_num max number of item.
+ * @param pool is pool to memory allocate.
+ * @return APR_SUCCESS if all went well
+ */
+AP_DECLARE(apr_status_t) ap_slotmem_attach(ap_slotmem_storage_method *sm, ap_slotmem_t **new, const char *name, apr_size_t *item_size, int *item_num, apr_pool_t *pool);
+/**
+ * get the memory associated with this worker slot.
+ * @param s ap_slotmem_t to use.
+ * @param item_id item to return for 0 to item_num
+ * @param mem address to store the pointer to the slot
+ * @return APR_SUCCESS if all went well
+ */
+AP_DECLARE(apr_status_t) ap_slotmem_mem(ap_slotmem_storage_method *sm, ap_slotmem_t *s, int item_id, void**mem);
+/**
+ * lock the memory segment
+ * NOTE: All slots share the same mutex
+ * @param s ap_slotmem_t to use
+ * @return APR_SUCCESS if all went well
+ */
+AP_DECLARE(apr_status_t) ap_slotmem_lock(ap_slotmem_storage_method *sm, ap_slotmem_t *s);
+/**
+ * unlock the memory segment
+ * NOTE: All slots share the same mutex
+ * @param s ap_slotmem_t to use.
+ * @return APR_SUCCESS if all went well
+ */
+AP_DECLARE(apr_status_t) ap_slotmem_unlock(ap_slotmem_storage_method *sm, ap_slotmem_t *s);
#endif /*SLOTMEM_H*/
Modified: httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c?rev=730181&r1=730180&r2=730181&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c (original)
+++ httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c Tue Dec 30 09:08:24 2008
@@ -18,15 +18,7 @@
* This one uses plain memory.
*/
-#include "slotmem.h"
-
-struct ap_slotmem {
- char *name;
- void *base;
- apr_size_t size;
- int num;
- struct ap_slotmem *next;
-};
+#include "mod_slotmem.h"
/* global pool and list of slotmem we are handling */
static struct ap_slotmem *globallistmem = NULL;
@@ -167,6 +159,7 @@
static void ap_plainmem_register_hook(apr_pool_t *p)
{
+ static const char * const prePos[] = { "mod_slotmem.c", NULL };
ap_register_provider(p, SLOTMEM_STORAGE, "plain", "0", &storage);
ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE);
}
Modified: httpd/httpd/trunk/modules/mem/providers/mod_sharedmem.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/mem/providers/mod_sharedmem.c?rev=730181&r1=730180&r2=730181&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/mem/providers/mod_sharedmem.c (original)
+++ httpd/httpd/trunk/modules/mem/providers/mod_sharedmem.c Tue Dec 30 09:08:24 2008
@@ -18,7 +18,7 @@
* This one uses shared memory.
*/
-#include "slotmem.h"
+#include "mod_slotmem.h"
/* The description of the slots to reuse the slotmem */
struct sharedslotdesc {
@@ -123,7 +123,7 @@
return APR_SUCCESS;
}
-static apr_status_t ap_slotmem_do(ap_slotmem_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool)
+static apr_status_t slotmem_do(ap_slotmem_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool)
{
int i;
void *ptr;
@@ -139,7 +139,7 @@
}
return APR_SUCCESS;
}
-static apr_status_t ap_slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t item_size, int item_num, apr_pool_t *pool)
+static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t item_size, int item_num, apr_pool_t *pool)
{
/* void *slotmem = NULL; */
void *ptr;
@@ -240,7 +240,7 @@
*new = res;
return APR_SUCCESS;
}
-static apr_status_t ap_slotmem_attach(ap_slotmem_t **new, const char *name, apr_size_t *item_size, int *item_num, apr_pool_t *pool)
+static apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_size_t *item_size, int *item_num, apr_pool_t *pool)
{
/* void *slotmem = NULL; */
void *ptr;
@@ -313,7 +313,7 @@
*item_num = desc.item_num;
return APR_SUCCESS;
}
-static apr_status_t ap_slotmem_mem(ap_slotmem_t *slot, int id, void **mem)
+static apr_status_t slotmem_mem(ap_slotmem_t *slot, int id, void **mem)
{
void *ptr;
@@ -333,27 +333,27 @@
return APR_SUCCESS;
}
-static apr_status_t ap_slotmem_lock(ap_slotmem_t *slot)
+static apr_status_t slotmem_lock(ap_slotmem_t *slot)
{
return (apr_global_mutex_lock(slot->smutex));
}
-static apr_status_t ap_slotmem_unlock(ap_slotmem_t *slot)
+static apr_status_t slotmem_unlock(ap_slotmem_t *slot)
{
return (apr_global_mutex_unlock(slot->smutex));
}
-static const slotmem_storage_method storage = {
- &ap_slotmem_do,
- &ap_slotmem_create,
- &ap_slotmem_attach,
- &ap_slotmem_mem,
- &ap_slotmem_lock,
- &ap_slotmem_unlock
+static const ap_slotmem_storage_method storage = {
+ &slotmem_do,
+ &slotmem_create,
+ &slotmem_attach,
+ &slotmem_mem,
+ &slotmem_lock,
+ &slotmem_unlock
};
/* make the storage usuable from outside */
-static const slotmem_storage_method *sharedmem_getstorage(void)
+static const ap_slotmem_storage_method *sharedmem_getstorage(void)
{
return (&storage);
}
@@ -466,7 +466,7 @@
static void ap_sharedmem_register_hook(apr_pool_t *p)
{
- const slotmem_storage_method *storage = sharedmem_getstorage();
+ const ap_slotmem_storage_method *storage = sharedmem_getstorage();
ap_register_provider(p, SLOTMEM_STORAGE, "shared", "0", storage);
ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_LAST);
ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE);
Re: svn commit: r730181 - in /httpd/httpd/trunk/modules/mem: mod_slotmem.h
providers/mod_plainmem.c providers/mod_sharedmem.c
Posted by Ruediger Pluem <rp...@apache.org>.
On 12/30/2008 06:08 PM, jim@apache.org wrote:
> Author: jim
> Date: Tue Dec 30 09:08:24 2008
> New Revision: 730181
>
> URL: http://svn.apache.org/viewvc?rev=730181&view=rev
> Log:
> And complete the API changes...
>
> Modified:
> httpd/httpd/trunk/modules/mem/mod_slotmem.h
> httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c
> httpd/httpd/trunk/modules/mem/providers/mod_sharedmem.c
>
> Modified: httpd/httpd/trunk/modules/mem/mod_slotmem.h
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/mem/mod_slotmem.h?rev=730181&r1=730180&r2=730181&view=diff
> ==============================================================================
> Modified: httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c?rev=730181&r1=730180&r2=730181&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c (original)
> +++ httpd/httpd/trunk/modules/mem/providers/mod_plainmem.c Tue Dec 30 09:08:24 2008
> @@ -167,6 +159,7 @@
>
> static void ap_plainmem_register_hook(apr_pool_t *p)
> {
> + static const char * const prePos[] = { "mod_slotmem.c", NULL };
Why is prePos not used later on? And don't we need to do the same thing
regarding hook ordering for mod_sharedmem.c?
> ap_register_provider(p, SLOTMEM_STORAGE, "plain", "0", &storage);
> ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE);
> }
>