/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
*
- * @APPLE_LICENSE_HEADER_START@
+ * @APPLE_LICENSE_OSREFERENCE_HEADER_START@
*
- * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the
+ * License may not be used to create, or enable the creation or
+ * redistribution of, unlawful or unlicensed copies of an Apple operating
+ * system, or to circumvent, violate, or enable the circumvention or
+ * violation of, any terms of an Apple operating system software license
+ * agreement.
+ *
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
* file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
* limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
+ *
+ * @APPLE_LICENSE_OSREFERENCE_HEADER_END@
*/
/*
* @OSF_COPYRIGHT@
#include <mach_rt.h>
+#include <mach/mach_types.h>
#include <mach/boolean.h>
#include <mach/kern_return.h>
#include <mach/port.h>
#include <mach/message.h>
+
+#include <kern/kern_types.h>
#include <kern/misc_protos.h>
+
+#include <ipc/ipc_types.h>
#include <ipc/port.h>
#include <ipc/ipc_space.h>
#include <ipc/ipc_entry.h>
ipc_entry_t entry;
kern_return_t kr;
- int i;
-
-
kr = ipc_entry_alloc(space, namep, &entry);
if (kr != KERN_SUCCESS)
return kr;
ipc_entry_t entry;
kern_return_t kr;
- int i;
-
-
kr = ipc_entry_alloc_name(space, name, &entry);
if (kr != KERN_SUCCESS)
return kr;
ipc_port_t soright;
kern_return_t kr;
- int i;
-
/*
* Could first try a read lock when doing
* MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND,
* Copyin a naked capability from the kernel.
*
* MACH_MSG_TYPE_MOVE_RECEIVE
- * The receiver must be ipc_space_kernel.
+ * The receiver must be ipc_space_kernel
+ * or the receive right must already be in limbo.
* Consumes the naked receive right.
* MACH_MSG_TYPE_COPY_SEND
* A naked send right must be supplied.
ip_lock(port);
assert(ip_active(port));
- assert(port->ip_receiver_name != MACH_PORT_NULL);
- assert(port->ip_receiver == ipc_space_kernel);
+ if (port->ip_destination != IP_NULL) {
+ assert(port->ip_receiver == ipc_space_kernel);
- /* relevant part of ipc_port_clear_receiver */
- ipc_port_set_mscount(port, 0);
+ /* relevant part of ipc_port_clear_receiver */
+ ipc_port_set_mscount(port, 0);
- port->ip_receiver_name = MACH_PORT_NULL;
- port->ip_destination = IP_NULL;
+ port->ip_receiver_name = MACH_PORT_NULL;
+ port->ip_destination = IP_NULL;
+ }
ip_unlock(port);
break;
}
break;
}
- case MACH_MSG_TYPE_MOVE_SEND:
+ case MACH_MSG_TYPE_MOVE_SEND: {
/* move naked send right into the message */
+ assert(((ipc_port_t)object)->ip_srights);
break;
+ }
case MACH_MSG_TYPE_MAKE_SEND_ONCE: {
ipc_port_t port = (ipc_port_t) object;
break;
}
- case MACH_MSG_TYPE_MOVE_SEND_ONCE:
+ case MACH_MSG_TYPE_MOVE_SEND_ONCE: {
/* move naked send-once right into the message */
+ assert(((ipc_port_t)object)->ip_sorights);
break;
+ }
default:
panic("ipc_object_copyin_from_kernel: strange rights");
ipc_entry_t entry;
kern_return_t kr;
- int i;
-
assert(IO_VALID(object));
assert(io_otype(object) == IOT_PORT);
default:
panic("ipc_object_copyout_dest: strange rights");
+ name = MACH_PORT_DEAD;
}
*namep = name;
ipc_entry_t oentry, nentry;
kern_return_t kr;
- int i;
-
kr = ipc_entry_alloc_name(space, nname, &nentry);
if (kr != KERN_SUCCESS)
return kr;
ipc_port_track_dealloc(port);
#endif /* MACH_ASSERT */
}
- zfree(ipc_object_zones[otype], (vm_offset_t) object);
+ zfree(ipc_object_zones[otype], object);
}
#endif /* MACH_ASSERT */
#if MACH_KDB
#include <ddb/db_output.h>
+#include <kern/ipc_kobject.h>
#define printf kdbprintf
* Pretty-print an object for kdb.
*/
-char *ikot_print_array[IKOT_MAX_TYPE] = {
+const char *ikot_print_array[IKOT_MAX_TYPE] = {
"(NONE) ",
"(THREAD) ",
"(TASK) ",