summaryrefslogtreecommitdiff
path: root/shmem
diff options
context:
space:
mode:
authoraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2002-01-22 19:31:41 +0000
committeraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2002-01-22 19:31:41 +0000
commit91ef2de2c79231c51f1454e1e5dd4835fc78376f (patch)
tree4a67619017ae25c3a11118626e35bdea599dc737 /shmem
parent065971ce54985e4cb7dc0987b70273bb141f4f88 (diff)
downloadlibapr-91ef2de2c79231c51f1454e1e5dd4835fc78376f.tar.gz
Add some more comments and more robust error checking.
Changed the return error from apr_shm_attach if filename == NULL. Normally in APR input parameters are not explicitly checked, but since in apr_shm a NULL filename has a special meaning (anonymous memory) it will now return APR_EINVAL in that case. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62814 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'shmem')
-rw-r--r--shmem/unix/shm.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/shmem/unix/shm.c b/shmem/unix/shm.c
index 0985f68b9..639afd7dd 100644
--- a/shmem/unix/shm.c
+++ b/shmem/unix/shm.c
@@ -311,13 +311,19 @@ APR_DECLARE(apr_status_t) apr_shm_destroy(apr_shm_t *m)
#if APR_USE_SHMEM_MMAP_TMP || APR_USE_SHMEM_MMAP_SHM || APR_USE_SHMEM_MMAP_ZERO
munmap(m->base, m->realsize);
apr_file_close(m->file);
+ /* FIXME: unlink the file */
#elif APR_USE_SHMEM_MMAP_ANON
munmap(m->base, m->realsize);
#elif APR_USE_SHMEM_SHMGET || APR_USE_SHMEM_SHMGET_ANON
+ /* Indicate that the segment is to be destroyed as soon
+ * as all processes have detached. This also disallows any
+ * new attachments to the segment. */
if (shmctl(m->shmid, IPC_RMID, NULL) == -1) {
return errno;
}
- shmdt(m->base);
+ if (shmdt(m->base) == -1) {
+ return errno;
+ }
#endif
return APR_SUCCESS;
@@ -330,12 +336,9 @@ APR_DECLARE(apr_status_t) apr_shm_attach(apr_shm_t **m,
apr_status_t status;
if (filename == NULL) {
-#if APR_USE_SHMEM_MMAP_ZERO || APR_USE_SHMEM_MMAP_ANON
- /* If they want anonymous memory they shouldn't call attach. */
- return APR_EGENERAL;
-#else
- return APR_ENOTIMPL;
-#endif
+ /* It doesn't make sense to attach to a segment if you don't know
+ * the filename. */
+ return APR_EINVAL;
}
else {
#if APR_USE_SHMEM_MMAP_TMP || APR_USE_SHMEM_MMAP_SHM
@@ -420,7 +423,7 @@ APR_DECLARE(apr_status_t) apr_shm_detach(apr_shm_t *m)
/* FIXME: munmap the segment. */
return APR_ENOTIMPL;
#elif APR_USE_SHMEM_SHMGET
- if (shmdt(m->base) < 0) {
+ if (shmdt(m->base) == -1) {
return errno;
}
return APR_SUCCESS;