summaryrefslogtreecommitdiff
path: root/hurd
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2015-03-25 02:36:31 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2015-03-25 02:36:31 +0100
commitafd6ce081d51f1f92f4522f586b5bb385e055b67 (patch)
tree3ad95105298736b4f3ce63a31d45f3e64be08b77 /hurd
parentfc80c27620b9bf7c4c182cf33c84380b4a82fa4c (diff)
parent5d8ef852fce5c86756bfd05cbbc5b05351dd9ced (diff)
Merge branch 't/sysvshm' into refs/top-bases/tschwinge/Roger_Whittaker
Diffstat (limited to 'hurd')
-rw-r--r--hurd/sysvshm.c27
-rw-r--r--hurd/sysvshm.h25
2 files changed, 29 insertions, 23 deletions
diff --git a/hurd/sysvshm.c b/hurd/sysvshm.c
index 18d27d6c44..5d538a6373 100644
--- a/hurd/sysvshm.c
+++ b/hurd/sysvshm.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 2005-2015 Free Software Foundation, Inc.
+/* SysV shared memory for Hurd.
+ Copyright (C) 2005-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -12,9 +13,8 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
#include <string.h>
#include <stdlib.h>
@@ -42,7 +42,7 @@ struct sysvshm_attach
};
/* List of attachments. */
-static struct sysvshm_attach *attach_list;
+static struct sysvshm_attach *sysvshm_list;
/* A lock to protect the linked list of shared memory attachments. */
static struct mutex sysvshm_lock = MUTEX_INITIALIZER;
@@ -55,30 +55,30 @@ __sysvshm_add (void *addr, size_t size)
struct sysvshm_attach *shm;
shm = malloc (sizeof (*shm));
- if (!shm)
+ if (shm == NULL)
return errno;
__mutex_lock (&sysvshm_lock);
shm->addr = addr;
shm->size = size;
- shm->next = attach_list;
- attach_list = shm;
+ shm->next = sysvshm_list;
+ sysvshm_list = shm;
__mutex_unlock (&sysvshm_lock);
return 0;
}
-/* Removes a segment attachment. Returns its size if found, or EINVAL
- otherwise. */
+/* Removes a segment attachment. On success, returns 0 and sets *SIZE to its
+ size. Returns EINVAL if not found. */
error_t
__sysvshm_remove (void *addr, size_t *size)
{
struct sysvshm_attach *shm;
- struct sysvshm_attach **pshm = &attach_list;
+ struct sysvshm_attach **pshm = &sysvshm_list;
__mutex_lock (&sysvshm_lock);
- shm = attach_list;
- while (shm)
+ shm = sysvshm_list;
+ while (shm != NULL)
{
shm = *pshm;
if (shm->addr == addr)
@@ -86,6 +86,7 @@ __sysvshm_remove (void *addr, size_t *size)
*pshm = shm->next;
*size = shm->size;
__mutex_unlock (&sysvshm_lock);
+ free (shm);
return 0;
}
pshm = &shm->next;
diff --git a/hurd/sysvshm.h b/hurd/sysvshm.h
index 138a8faba8..8b9c29ff46 100644
--- a/hurd/sysvshm.h
+++ b/hurd/sysvshm.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2005-2015 Free Software Foundation, Inc.
+/* SysV shared memory for Hurd.
+ Copyright (C) 2005-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -12,20 +13,22 @@
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _HURD_SYSVSHM_H
+#define _HURD_SYSVSHM_H
#include <paths.h>
#include <hurd.h>
/* The area (from top to bottom) that is used for private keys. These
are all keys that have the second highest bit set. */
-#define SHM_PRIV_KEY_START INT_MAX
-#define SHM_PRIV_KEY_END ((INT_MAX / 2) + 1)
+#define SHM_PRIV_KEY_START INT_MAX
+#define SHM_PRIV_KEY_END ((INT_MAX / 2) + 1)
-#define SHM_PREFIX "shm-"
-#define SHM_DIR _PATH_DEV "shm/"
+#define SHM_PREFIX "sysvshm-"
+#define SHM_DIR _PATH_DEV "shm/"
/* The maximum number of characters in a shared memory segment file name.
32 is the max number of characters in a 128 bit number in hex. */
@@ -42,6 +45,8 @@
/* Adds a segment attachment. */
error_t __sysvshm_add (void *addr, size_t size);
-/* Removes a segment attachment. Returns its size if found, or EINVAL
- otherwise. */
+/* Removes a segment attachment. On success, returns 0 and sets *SIZE to its
+ size. Returns EINVAL if not found. */
error_t __sysvshm_remove (void *addr, size_t *size);
+
+#endif /* sysvshm.h */