?? mig-reply.c
字號:
/* Copyright (C) 1994,1995,1996,1997,2005 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 modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */#include <mach.h>#include <hurd/threadvar.h>#define GETPORT \ mach_port_t *portloc = \ (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY)#define reply_port (*(use_threadvar ? portloc : &global_reply_port))static int use_threadvar;static mach_port_t global_reply_port;/* These functions are called by MiG-generated code. *//* Called by MiG to get a reply port. */mach_port_t__mig_get_reply_port (void){ GETPORT; if (reply_port == MACH_PORT_NULL) reply_port = __mach_reply_port (); return reply_port;}weak_alias (__mig_get_reply_port, mig_get_reply_port)/* Called by MiG to deallocate the reply port. */void__mig_dealloc_reply_port (mach_port_t arg){ mach_port_t port; GETPORT; port = reply_port; reply_port = MACH_PORT_NULL; /* So the mod_refs RPC won't use it. */ if (MACH_PORT_VALID (port)) __mach_port_mod_refs (__mach_task_self (), port, MACH_PORT_RIGHT_RECEIVE, -1);}weak_alias (__mig_dealloc_reply_port, mig_dealloc_reply_port)/* Called by mig interfaces when done with a port. Used to provide the same interface as needed when a custom allocator is used. */void__mig_put_reply_port(mach_port_t port){ /* Do nothing. */}weak_alias (__mig_put_reply_port, mig_put_reply_port)/* Called at startup with STACK == NULL. When per-thread variables are set up, this is called again with STACK set to the new stack being switched to, where per-thread variables should be set up. */void__mig_init (void *stack){ use_threadvar = stack != 0; if (use_threadvar) { /* Recycle the reply port used before multithreading was enabled. */ mach_port_t *portloc = (mach_port_t *) __hurd_threadvar_location_from_sp (_HURD_THREADVAR_MIG_REPLY, stack); *portloc = global_reply_port; global_reply_port = MACH_PORT_NULL; }}weak_alias (__mig_init, mig_init)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -