summaryrefslogtreecommitdiff
path: root/debian/patches/upstreamme0002-ipc-use-a-general-lock-to-protect-IPC-spaces.patch
blob: 2c6b731663fe9f2ac02809ea3dd4de37639f23e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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