diff options
Diffstat (limited to 'debian/patches/upstreamme0002-ipc-use-a-general-lock-to-protect-IPC-spaces.patch')
-rw-r--r-- | debian/patches/upstreamme0002-ipc-use-a-general-lock-to-protect-IPC-spaces.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/debian/patches/upstreamme0002-ipc-use-a-general-lock-to-protect-IPC-spaces.patch b/debian/patches/upstreamme0002-ipc-use-a-general-lock-to-protect-IPC-spaces.patch new file mode 100644 index 0000000..2c6b731 --- /dev/null +++ b/debian/patches/upstreamme0002-ipc-use-a-general-lock-to-protect-IPC-spaces.patch @@ -0,0 +1,53 @@ +From 7c9b83c90e2acc4f9eb74713c47796a3c0a08800 Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Wed, 15 Jul 2015 12:40:50 +0200 +Subject: [PATCH gnumach 2/2] ipc: use a general lock to protect IPC spaces + +This fixes a corruption in the radix trees representing the IPC spaces +when memory was tight. + +* ipc/ipc_space.h: Use a general lock to protect IPC spaces. +--- + ipc/ipc_space.h | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/ipc/ipc_space.h b/ipc/ipc_space.h +index bbfee46..73c90ef 100644 +--- a/ipc/ipc_space.h ++++ b/ipc/ipc_space.h +@@ -62,7 +62,7 @@ struct ipc_space { + decl_simple_lock_data(,is_ref_lock_data) + ipc_space_refs_t is_references; + +- decl_simple_lock_data(,is_lock_data) ++ struct lock is_lock_data; + boolean_t is_active; /* is the space alive? */ + struct rdxtree is_map; /* a map of entries */ + size_t is_size; /* number of entries */ +@@ -107,16 +107,16 @@ MACRO_BEGIN \ + is_free(is); \ + MACRO_END + +-#define is_lock_init(is) simple_lock_init(&(is)->is_lock_data) ++#define is_lock_init(is) lock_init(&(is)->is_lock_data, TRUE) + +-#define is_read_lock(is) simple_lock(&(is)->is_lock_data) +-#define is_read_unlock(is) simple_unlock(&(is)->is_lock_data) ++#define is_read_lock(is) lock_read(&(is)->is_lock_data) ++#define is_read_unlock(is) lock_done(&(is)->is_lock_data) + +-#define is_write_lock(is) simple_lock(&(is)->is_lock_data) +-#define is_write_lock_try(is) simple_lock_try(&(is)->is_lock_data) +-#define is_write_unlock(is) simple_unlock(&(is)->is_lock_data) ++#define is_write_lock(is) lock_write(&(is)->is_lock_data) ++#define is_write_lock_try(is) lock_try_write(&(is)->is_lock_data) ++#define is_write_unlock(is) lock_done(&(is)->is_lock_data) + +-#define is_write_to_read_lock(is) ++#define is_write_to_read_lock(is) lock_write_to_read(&(is)->is_lock_data) + + extern void ipc_space_reference(struct ipc_space *space); + extern void ipc_space_release(struct ipc_space *space); +-- +2.1.4 + |