summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libhurd-mm/ChangeLog6
-rw-r--r--libhurd-mm/message-buffer.c15
2 files changed, 19 insertions, 2 deletions
diff --git a/libhurd-mm/ChangeLog b/libhurd-mm/ChangeLog
index ca8da4a..e19d1d9 100644
--- a/libhurd-mm/ChangeLog
+++ b/libhurd-mm/ChangeLog
@@ -1,5 +1,11 @@
2008-12-18 Neal H. Walfield <neal@gnu.org>
+ * message-buffer.c (num_threads): New function.
+ (BUFFERS_LOW_WATER): Define in terms of the number of threads.
+ (BUFFERS_HIGH_WATER): Likewise.
+
+2008-12-18 Neal H. Walfield <neal@gnu.org>
+
* message-buffer.c (hurd_message_buffer_alloc): Fix compare and
swap logic.
diff --git a/libhurd-mm/message-buffer.c b/libhurd-mm/message-buffer.c
index ecb2b58..1bee6a1 100644
--- a/libhurd-mm/message-buffer.c
+++ b/libhurd-mm/message-buffer.c
@@ -268,8 +268,19 @@ hurd_message_buffer_free (struct hurd_message_buffer *buffer)
}
}
-#define BUFFERS_LOW_WATER 4
-#define BUFFERS_HIGH_WATER 8
+static int
+num_threads (void)
+{
+ extern int __pthread_num_threads __attribute__ ((weak));
+
+ if (&__pthread_num_threads)
+ return __pthread_num_threads;
+ else
+ return 1;
+}
+
+#define BUFFERS_LOW_WATER (4 + num_threads () * 2)
+#define BUFFERS_HIGH_WATER (8 + num_threads () * 3)
struct hurd_message_buffer *
hurd_message_buffer_alloc (void)