You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by dr...@apache.org on 2004/06/29 18:38:16 UTC
cvs commit: apr/shmem/beos shm.c
dreid 2004/06/29 09:38:16
Modified: shmem/beos shm.c
Log:
Continue clearing my TODO list.
This provides for better "naming" of anon areas, adds a missing function
and tidies up some code.
Revision Changes Path
1.13 +21 -7 apr/shmem/beos/shm.c
Index: shm.c
===================================================================
RCS file: /home/cvs/apr/shmem/beos/shm.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- shm.c 1 Jun 2004 10:03:50 -0000 1.12
+++ shm.c 29 Jun 2004 16:38:16 -0000 1.13
@@ -34,19 +34,28 @@
APR_DECLARE(apr_status_t) apr_shm_create(apr_shm_t **m,
apr_size_t reqsize,
- const char *file,
+ const char *filename,
apr_pool_t *p)
{
apr_size_t pagesize;
area_id newid;
char *addr;
+ char shname[B_OS_NAME_LENGTH];
(*m) = (apr_shm_t *)apr_pcalloc(p, sizeof(apr_shm_t));
/* we MUST allocate in pages, so calculate how big an area we need... */
pagesize = ((reqsize + B_PAGE_SIZE - 1) / B_PAGE_SIZE) * B_PAGE_SIZE;
- newid = create_area("apr_shmem", (void*)&addr, B_ANY_ADDRESS,
- pagesize, B_CONTIGUOUS, B_READ_AREA|B_WRITE_AREA);
+ if (!filename) {
+ int num = 0;
+ snprintf(shname, B_OS_NAME_LENGTH, "apr_shmem_%ld", find_thread(NULL));
+ while (find_area(shname) >= 0)
+ snprintf(shname, B_OS_NAME_LENGTH, "apr_shmem_%ld_%d",
+ find_thread(NULL), num++);
+ }
+ newid = create_area(filename ? filename : shname,
+ (void*)&addr, B_ANY_ADDRESS,
+ pagesize, B_LAZY_LOCK, B_READ_AREA|B_WRITE_AREA);
if (newid < 0)
return errno;
@@ -72,7 +81,13 @@
APR_DECLARE(apr_status_t) apr_shm_remove(const char *filename,
apr_pool_t *pool)
{
- return APR_ENOTIMPL;
+ area_id deleteme = find_area(filename);
+
+ if (deleteme == B_NAME_NOT_FOUND)
+ return APR_EINVAL;
+
+ delete_area(deleteme);
+ return APR_SUCCESS;
}
APR_DECLARE(apr_status_t) apr_shm_attach(apr_shm_t **m,
@@ -81,10 +96,9 @@
{
area_info ai;
thread_info ti;
- area_id deleteme;
apr_shm_t *new_m;
-
- deleteme = find_area(filename);
+ area_id deleteme = find_area(filename);
+
if (deleteme == B_NAME_NOT_FOUND)
return APR_EINVAL;