Crashpad
|
A concrete implementation of Interface that provides a default behavior for all notify
routines.
More...
#include "util/mach/notify_server.h"
Public Member Functions | |
kern_return_t | DoMachNotifyPortDeleted (notify_port_t notify, mach_port_name_t name, const mach_msg_trailer_t *trailer) override |
Handles port-deleted notifications sent by mach_notify_port_deleted() . More... | |
kern_return_t | DoMachNotifyPortDestroyed (notify_port_t notify, mach_port_t rights, const mach_msg_trailer_t *trailer, bool *destroy_request) override |
Handles port-destroyed notifications sent by mach_notify_port_destroyed() . More... | |
kern_return_t | DoMachNotifyNoSenders (notify_port_t notify, mach_port_mscount_t mscount, const mach_msg_trailer_t *trailer) override |
Handles no-senders notifications sent by mach_notify_no_senders() . More... | |
kern_return_t | DoMachNotifySendOnce (notify_port_t notify, const mach_msg_trailer_t *trailer) override |
Handles send-once notifications sent by mach_notify_send_once() . More... | |
kern_return_t | DoMachNotifyDeadName (notify_port_t notify, mach_port_name_t name, const mach_msg_trailer_t *trailer) override |
Handles dead-name notifications sent by mach_notify_dead_name() . More... | |
A concrete implementation of Interface that provides a default behavior for all notify
routines.
The Mach notify
subsystem contains a collection of unrelated routines, and a single server would rarely need to implement all of them. To make it easier to use NotifyServer, a server can inherit from DefaultInterface instead of Interface. Unless overridden, each routine in DefaultInterface returns MIG_BAD_ID
to indicate to the caller that the notify
message was unexpected and not processed.
|
overridevirtual |
Handles dead-name notifications sent by mach_notify_dead_name()
.
A dead-name notification is generated when a port with a dead-name notification request is destroyed and the right becomes a dead name.
This behaves equivalently to a do_mach_notify_dead_name()
function used with notify_server()
.
[in] | notify | The Mach port that the notification was sent to. |
[in] | name | The dead name. Although this is transferred as a mach_port_name_t and not a mach_port_t , the callee assumes an additional reference to this port when this method is called. See the note below. |
[in] | trailer | The trailer received with the notification message. |
mach_port_name_t
) without transferring port rights, and are thus not complex Mach messages. Implements crashpad::NotifyServer::Interface.
|
overridevirtual |
Handles no-senders notifications sent by mach_notify_no_senders()
.
A no-senders notification is generated when a receive right with a no-senders notification request loses its last corresponding send right.
This behaves equivalently to a do_mach_notify_no_senders()
function used with notify_server()
.
[in] | notify | The Mach port that the notification was sent to. |
[in] | mscount | The value of the sender-less port’s make-send count at the time the notification was generated. |
[in] | trailer | The trailer received with the notification message. |
Implements crashpad::NotifyServer::Interface.
|
overridevirtual |
Handles port-deleted notifications sent by mach_notify_port_deleted()
.
A port-deleted notification is generated when a port with a dead-name notification request is destroyed and the port name becomes available for reuse.
This behaves equivalently to a do_mach_notify_port_deleted()
function used with notify_server()
.
[in] | notify | The Mach port that the notification was sent to. |
[in] | name | The name that formerly referenced the deleted port. When this method is called, name no longer corresponds to the port that has been deleted, and may be reused for another purpose. |
[in] | trailer | The trailer received with the notification message. |
Implements crashpad::NotifyServer::Interface.
|
overridevirtual |
Handles port-destroyed notifications sent by mach_notify_port_destroyed()
.
A port-destroyed notification is generated when a receive right with a port-destroyed notification request is destroyed. Rather than destroying the receive right, it is transferred via this notification’s rights parameter.
This behaves equivalently to a do_mach_notify_port_destroyed()
function used with notify_server()
.
[in] | notify | The Mach port that the notification was sent to. |
[in] | rights | A receive right for the port that would have been destroyed. The callee takes ownership of this port, however, if the callee does not wish to take ownership, it may set destroy_request to true . |
[in] | trailer | The trailer received with the notification message. |
[out] | destroy_request | true if the request message is to be destroyed even when this method returns success. See MachMessageServer::Interface. |
Implements crashpad::NotifyServer::Interface.
|
overridevirtual |
Handles send-once notifications sent by mach_notify_send_once()
.
A send-once notification is generated when a send-once right is destroyed without being used.
This behaves equivalently to a do_mach_notify_send_once()
function used with notify_server()
.
[in] | notify | The Mach port that the notification was sent to. |
[in] | trailer | The trailer received with the notification message. |
notify
subsystem, send-once notifications are not generated as a result of a notification request, but are generated any time a send-once right is destroyed rather than being used. The notification is sent via the send-once right to its receiver. These notifications are more useful for clients, not servers. Send-once notifications are normally handled by MIG-generated client routines, which make send-once rights for their reply ports and interpret send-once notifications as a signal that there will be no reply. Although not expected to be primarily useful for servers, this method is provided because send-once notifications are defined as a part of the notify
subsystem. Implements crashpad::NotifyServer::Interface.