You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by bj...@apache.org on 2002/01/10 03:09:20 UTC
cvs commit: apr/shmem/os2 Makefile.in shm.c
bjh 02/01/09 18:09:20
Modified: shmem/os2 Makefile.in shm.c
Log:
OS/2: Pound the new shm code into some kind of working order.
Revision Changes Path
1.8 +1 -1 apr/shmem/os2/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/apr/shmem/os2/Makefile.in,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Makefile.in 9 Jan 2001 11:06:14 -0000 1.7
+++ Makefile.in 10 Jan 2002 02:09:20 -0000 1.8
@@ -1,5 +1,5 @@
-TARGETS = shmem.lo
+TARGETS = shm.lo
# bring in rules.mk for standard functionality
@INCLUDE_RULES@
1.2 +48 -24 apr/shmem/os2/shm.c
Index: shm.c
===================================================================
RCS file: /home/cvs/apr/shmem/os2/shm.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- shm.c 10 Jan 2002 00:20:06 -0000 1.1
+++ shm.c 10 Jan 2002 02:09:20 -0000 1.2
@@ -53,69 +53,93 @@
*/
#include "apr_general.h"
-#include "apr_shmem.h"
+#include "apr_shm.h"
#include "apr_errno.h"
#include "apr_lib.h"
#include "apr_strings.h"
-#include <umalloc.h>
-#include <stdlib.h>
-struct apr_shmem_t {
+struct apr_shm_t {
+ apr_pool_t *pool;
void *memblock;
- Heap_t heap;
};
-APR_DECLARE(apr_status_t) apr_shm_init(apr_shmem_t **m, apr_size_t reqsize, const char *filename, apr_pool_t *cont)
+APR_DECLARE(apr_status_t) apr_shm_create(apr_shm_t **m,
+ apr_size_t reqsize,
+ const char *filename,
+ apr_pool_t *pool)
{
int rc;
- apr_shmem_t *newm = (apr_shmem_t *)apr_palloc(cont, sizeof(apr_shmem_t));
+ apr_shm_t *newm = (apr_shm_t *)apr_palloc(pool, sizeof(apr_shm_t));
char *name = NULL;
ULONG flags = PAG_COMMIT|PAG_READ|PAG_WRITE;
- if (file)
- name = apr_pstrcat(cont, "\\SHAREMEM\\", file, NULL);
+ newm->pool = pool;
- if (name == NULL)
+ if (filename) {
+ name = apr_pstrcat(pool, "\\SHAREMEM\\", filename, NULL);
+ }
+
+ if (name == NULL) {
flags |= OBJ_GETTABLE;
+ }
- reqsize += 1024; /* Allow some overhead for heap structures */
rc = DosAllocSharedMem(&(newm->memblock), name, reqsize, flags);
- if (rc)
+ if (rc) {
return APR_OS2_STATUS(rc);
+ }
- newm->heap = _ucreate(newm->memblock, reqsize, !_BLOCK_CLEAN, _HEAP_REGULAR|_HEAP_SHARED, NULL, NULL);
- _uopen(newm->heap);
*m = newm;
return APR_SUCCESS;
}
-APR_DECLARE(apr_status_t) apr_shm_destroy(apr_shmem_t *m)
+APR_DECLARE(apr_status_t) apr_shm_destroy(apr_shm_t *m)
{
- _uclose(m->heap);
- _udestroy(m->heap, _FORCE);
DosFreeMem(m->memblock);
return APR_SUCCESS;
}
-APR_DECLARE(apr_status_t) apr_shm_attach(apr_shmem_t **m,
+APR_DECLARE(apr_status_t) apr_shm_attach(apr_shm_t **m,
const char *filename,
apr_pool_t *pool)
{
- return APR_ENOTIMPL;
+ int rc;
+ apr_shm_t *newm = (apr_shm_t *)apr_palloc(pool, sizeof(apr_shm_t));
+ char *name = NULL;
+ ULONG flags = PAG_COMMIT|PAG_READ|PAG_WRITE;
+
+ newm->pool = pool;
+ name = apr_pstrcat(pool, "\\SHAREMEM\\", filename, NULL);
+
+ rc = DosGetNamedSharedMem(&(newm->memblock), name, flags);
+
+ if (rc) {
+ return APR_FROM_OS_ERROR(rc);
+ }
+
+ *m = newm;
+ return APR_SUCCESS;
}
-APR_DECLARE(apr_status_t) apr_shm_detach(apr_shmem_t *m)
+APR_DECLARE(apr_status_t) apr_shm_detach(apr_shm_t *m)
{
- return APR_ENOTIMPL;
+ int rc = 0;
+
+ if (m->memblock) {
+ rc = DosFreeMem(m->memblock);
+ }
+
+ return APR_FROM_OS_ERROR(rc);
}
APR_DECLARE(void *) apr_shm_baseaddr_get(const apr_shm_t *m)
{
- return APR_ENOTIMPL;
+ return m->memblock;
}
APR_DECLARE(apr_size_t) apr_shm_size_get(const apr_shm_t *m)
{
- return APR_ENOTIMPL;
-
+ ULONG flags, size = 0x1000000;
+ DosQueryMem(m->memblock, &size, &flags);
+ return size;
+}