📄 mig-reply.c
字号:
/* Copyright (C) 1994, 1995, 1996, 1997 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 + -