You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by jo...@apache.org on 2004/09/21 17:02:01 UTC
cvs commit: apr/shmem/unix shm.c
jorton 2004/09/21 08:02:01
Modified: shmem/unix shm.c
Log:
* shmem/unix/shm.c (apr_shm_remove): Ensure that the file is removed
even if the shm segment has already been destroyed; close the file
before returning.
Revision Changes Path
1.28 +11 -3 apr/shmem/unix/shm.c
Index: shm.c
===================================================================
RCS file: /home/cvs/apr/shmem/unix/shm.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -d -w -u -r1.27 -r1.28
--- shm.c 1 Jun 2004 10:03:50 -0000 1.27
+++ shm.c 21 Sep 2004 15:02:00 -0000 1.28
@@ -385,20 +385,28 @@
* exist before calling ftok(). */
shmkey = ftok(filename, 1);
if (shmkey == (key_t)-1) {
- return errno;
+ goto shm_remove_failed;
}
+ apr_file_close(file);
+
if ((shmid = shmget(shmkey, 0, SHM_R | SHM_W)) < 0) {
- return errno;
+ goto shm_remove_failed;
}
/* 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(shmid, IPC_RMID, NULL) == -1) {
- return errno;
+ goto shm_remove_failed;
}
return apr_file_remove(filename, pool);
+
+shm_remove_failed:
+ status = errno;
+ /* ensure the file has been removed anyway. */
+ apr_file_remove(filename, pool);
+ return status;
#endif
/* No support for anonymous shm */