From 21297437bb37c5f1aedb615fd41e93efc12f556a Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 18 Feb 2002 20:57:51 +0000 Subject: * sysdeps/mach/configure.in: Check for or and add -DNDR_DEF_HEADER=... to DEFINES. * sysdeps/mach/configure: Regenerated. * mach/mach_init.c [NDR_DEF_HEADER]: #include it. * hurd/hurdfault.c (_hurdsig_fault_init): Add a cast. * hurd/hurd/signal.h: Include for `jmp_buf' decl. * mach/msgserver.c (__mach_msg_server_timeout) [! MACH_RCV_LARGE]: Double MAX_SIZE and don't retry on MACH_RCV_TOO_LARGE. * sysdeps/mach/hurd/times.c [NO_CREATION_TIME] (startup_time): New static variable. [NO_CREATION_TIME] (times_init): New static function in __libc_subinit. (__times) [NO_CREATION_TIME]: Use startup_time in lieu of task creation_time from task_basic_info. (__times): Use __gettimeofday instead of __host_get_time. * hurd/intr-msg.c (_hurd_intr_rpc_mach_msg) [! MACH_MSG_TYPE_BIT]: Use untyped Mach IPC message format. * hurd/catch-exc.c: Include , missing from last change. --- mach/msgserver.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'mach/msgserver.c') diff --git a/mach/msgserver.c b/mach/msgserver.c index 6471877a78..82dc3d0c8f 100644 --- a/mach/msgserver.c +++ b/mach/msgserver.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1995, 1996, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,95,96,2001,02 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 @@ -49,6 +49,12 @@ /* * HISTORY * $Log$ + * Revision 1.9 2002/02/18 20:56:35 roland + * 2002-02-18 Roland McGrath + * + * * mach/msgserver.c (__mach_msg_server_timeout) [! MACH_RCV_LARGE]: + * Double MAX_SIZE and don't retry on MACH_RCV_TOO_LARGE. + * * Revision 1.8 2002/02/17 07:13:32 roland * 2002-02-16 Roland McGrath * @@ -116,8 +122,12 @@ __mach_msg_server_timeout (boolean_t (*demux) (mach_msg_header_t *request, if (max_size == 0) { +#ifdef MACH_RCV_LARGE option |= MACH_RCV_LARGE; max_size = 2 * __vm_page_size; /* Generic. Good? XXX */ +#else + max_size = 4 * __vm_page_size; /* XXX */ +#endif } request = __alloca (max_size); @@ -187,6 +197,7 @@ __mach_msg_server_timeout (boolean_t (*demux) (mach_msg_header_t *request, switch (mr) { case MACH_RCV_TOO_LARGE: +#ifdef MACH_RCV_LARGE /* The request message is larger than MAX_SIZE, and has not been dequeued. The message header has the actual size of the message. We recurse here in hopes that the compiler @@ -194,6 +205,10 @@ __mach_msg_server_timeout (boolean_t (*demux) (mach_msg_header_t *request, space instead of way too much. */ return __mach_msg_server_timeout (demux, request->Head.msgh_size, rcv_name, option, timeout); +#else + /* XXX the kernel has destroyed the msg */ + break; +#endif case MACH_SEND_INVALID_DEST: /* The reply can't be delivered, so destroy it. This error -- cgit 1.4.1