XXNU Source Handbook Download offline version from here
Part 09 · Chapter 09.19

Mach messages: notify

Message catalog and dispatch · All subsystem ranges · Kernel entry map

osfmk/mach/notify.defs. Service/callback interface outside the ordinary kernel kobject table. Follow local sender/receiver evidence; external service bodies are not supplied by the declaration. Registration evidence: mig_e.

Reading these entries

IDs are computed from the explicit preprocessing profiles in the catalog guide, counting both routines and skip slots. They are not discovered from a running kernel. Each entry retains all observed names/declaration locations; the displayed fields come from the first non-skipped profile. Alternative declarations can have different fields. simpleroutine is one-way at the MIG interface level.

An interface contract block quotes the adjacent local .defs comment with whitespace normalized. Mechanism paragraphs explain selected implementation decisions. Local body links and call names identify implementation evidence; syntactic call lists are reading aids, not a proof that every listed call executes on every path. Short complete implementation bodies are included where especially useful.

Complete routine and reserved-slot catalog

64: reserved

skip in all listed profiles. Source slot.

65: mach_notify_port_deleted

Interface contract:

MACH_NOTIFY_PORT_DELETED: 0101

Mechanism: The IPC notification wrapper sends the registered name on a send-once destination if that destination remains active. If it has died, the wrapper releases the send-once right instead. The message reports a namespace/right event to the registered receiver; it is not dispatched through an ordinary kernel kobject routine. See port lifecycle. Local path.

Declarations: mach_notify_port_deleted (server64, server32, client64, client32, libsyscall64, sender64, local64).

Fields after preprocessing (server64):

simpleroutine mach_notify_port_deleted(
  notify : mach_port_move_send_once_t;
  name : mach_port_name_t);

Implementation boundary: no same-symbol receiver body was resolved in the indexed local C/C++ implementation files. Local source occurrences to follow: osfmk/ipc/ipc_notify.c:119. These may be senders, wrappers or declarations; they do not establish a local receiver.

66: mach_notify_send_possible

Interface contract:

MACH_NOTIFY_SEND_POSSIBLE: 0102

Mechanism: The IPC notification wrapper sends the registered name on a send-once destination if that destination remains active. If it has died, the wrapper releases the send-once right instead. The message reports a namespace/right event to the registered receiver; it is not dispatched through an ordinary kernel kobject routine. See port lifecycle. Local path.

Declarations: mach_notify_send_possible (sender64). Reserved instead in: server64, server32, client64, client32, libsyscall64, local64.

Fields after preprocessing (sender64):

simpleroutine mach_notify_send_possible(
  notify : mach_port_move_send_once_t;
  name : mach_port_name_t);

Implementation boundary: no same-symbol receiver body was resolved in the indexed local C/C++ implementation files. Local source occurrences to follow: osfmk/ipc/ipc_notify.c:108. These may be senders, wrappers or declarations; they do not establish a local receiver.

67: reserved

skip in all listed profiles. Source slot.

68: reserved

skip in all listed profiles. Source slot.

69: mach_notify_port_destroyed

Interface contract:

MACH_NOTIFY_PORT_DESTROYED: 0105

Mechanism: The wrapper sends the receive right itself in the port-destroyed notification, allowing a registered backup receiver to take ownership. This differs from reporting a numeric name whose port has irreversibly died. The destination and transferred receive capability are owned by the notification transport. Local path.

Declarations: mach_notify_port_destroyed (server64, server32, client64, client32, libsyscall64, sender64, local64).

Fields after preprocessing (server64):

simpleroutine mach_notify_port_destroyed(
  notify : mach_port_move_send_once_t;
  rights : mach_port_move_receive_t);

Implementation boundary: no same-symbol receiver body was resolved in the indexed local C/C++ implementation files. Local source occurrences to follow: osfmk/ipc/ipc_notify.c:129. These may be senders, wrappers or declarations; they do not establish a local receiver.

70: mach_notify_no_senders

Interface contract:

MACH_NOTIFY_NO_SENDERS: 0106

Mechanism: The ordinary-port path removes the registered send-once request under the port lock and sends its make-send count if the destination is active, otherwise releases that right. Kernel kobjects use a separate direct pol_kobject_no_senders callback with a retained port; they do not all receive this MIG message. Local path.

Declarations: mach_notify_no_senders (server64, server32, client64, client32, libsyscall64, sender64, local64).

Fields after preprocessing (server64):

simpleroutine mach_notify_no_senders(
  notify : mach_port_move_send_once_t;
  mscount : mach_port_mscount_t);

Implementation boundary: no same-symbol receiver body was resolved in the indexed local C/C++ implementation files. Local source occurrences to follow: osfmk/ipc/ipc_notify.c:164. These may be senders, wrappers or declarations; they do not establish a local receiver.

71: mach_notify_send_once

Interface contract:

MACH_NOTIFY_SEND_ONCE: 0107

Mechanism: When a send-once right is disposed, the helper clears reply context and chooses among dead-port release, an in-kernel kobject notification, full-kernel-port release, or an ordinary one-way notification after unlocking. Only the last branch sends this message to a user receiver. Local path.

Declarations: mach_notify_send_once (server64, server32, client64, client32, libsyscall64, sender64, local64).

Fields after preprocessing (server64):

simpleroutine mach_notify_send_once(
  notify : mach_port_move_send_once_t
  );

Implementation boundary: no same-symbol receiver body was resolved in the indexed local C/C++ implementation files. Local source occurrences to follow: osfmk/ipc/ipc_notify.c:198. These may be senders, wrappers or declarations; they do not establish a local receiver.

72: mach_notify_dead_name

Interface contract:

MACH_NOTIFY_DEAD_NAME: 0110

Mechanism: The IPC notification wrapper sends the registered name on a send-once destination if that destination remains active. If it has died, the wrapper releases the send-once right instead. The message reports a namespace/right event to the registered receiver; it is not dispatched through an ordinary kernel kobject routine. See port lifecycle. Local path.

Declarations: mach_notify_dead_name (server64, server32, client64, client32, libsyscall64, sender64, local64).

Fields after preprocessing (server64):

simpleroutine mach_notify_dead_name(
  notify : mach_port_move_send_once_t;
  name : mach_port_name_t);

Implementation boundary: no same-symbol receiver body was resolved in the indexed local C/C++ implementation files. Local source occurrences to follow: osfmk/ipc/ipc_notify.c:97. These may be senders, wrappers or declarations; they do not establish a local receiver.

Search the handbook

Search every chapter, interface and code excerpt.

    Diagram

    Source preview

    Open full file