home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / glibc-1.06 / hurd / msgportdemux.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-30  |  1.6 KB  |  55 lines

  1. /* Demux messages sent on the signal port.
  2.  
  3. Copyright (C) 1991, 1992 Free Software Foundation, Inc.
  4. This file is part of the GNU C Library.
  5.  
  6. The GNU C Library is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Library General Public License as
  8. published by the Free Software Foundation; either version 2 of the
  9. License, or (at your option) any later version.
  10.  
  11. The GNU C Library is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. Library General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Library General Public
  17. License along with the GNU C Library; see the file COPYING.LIB.  If
  18. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  19. Cambridge, MA 02139, USA.  */
  20.  
  21. #include <hurd.h>
  22.  
  23. struct demux
  24.   {
  25.     struct demux *next;
  26.     boolean_t (*demux) (mach_msg_header_t *inp,
  27.             mach_msg_header_t *outp);
  28.   };
  29.  
  30. struct demux *_hurd_msgport_demuxers = NULL;
  31.  
  32. extern boolean_t __msg_server (mach_msg_header_t *inp,
  33.                    mach_msg_header_t *outp);
  34.  
  35. static boolean_t
  36. msgport_server (mach_msg_header_t *inp,
  37.              mach_msg_header_t *outp)
  38. {
  39.   struct demux *d;
  40.  
  41.   for (d = _hurd_msgport_demuxers; d != NULL; d = d->next)
  42.     if ((*d->demux) (inp, outp))
  43.       return 1;
  44.  
  45.   return __msg_server (inp, outp);
  46. }
  47.  
  48. /* This is the code that the signal thread runs.  */
  49. void
  50. _hurd_msgport_receive (void)
  51. {
  52.   while (1)
  53.     (void) __mach_msg_server (msgport_server, __vm_page_size, _hurd_msgport);
  54. }
  55.