diff options
author | aaron <aaron@13f79535-47bb-0310-9956-ffa450edef68> | 2002-01-22 19:31:41 +0000 |
---|---|---|
committer | aaron <aaron@13f79535-47bb-0310-9956-ffa450edef68> | 2002-01-22 19:31:41 +0000 |
commit | 91ef2de2c79231c51f1454e1e5dd4835fc78376f (patch) | |
tree | 4a67619017ae25c3a11118626e35bdea599dc737 /shmem | |
parent | 065971ce54985e4cb7dc0987b70273bb141f4f88 (diff) | |
download | libapr-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.c | 19 |
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; |