| Index: ipc/mach_port_attachment_mac.cc
|
| diff --git a/ipc/mach_port_attachment_mac.cc b/ipc/mach_port_attachment_mac.cc
|
| index 2a0cfa44bc82985c6ad4e095c4e72d31472cc0ac..5aec8fcdaf276227e041a886a7796b3afedb34ed 100644
|
| --- a/ipc/mach_port_attachment_mac.cc
|
| +++ b/ipc/mach_port_attachment_mac.cc
|
| @@ -4,21 +4,40 @@
|
|
|
| #include "ipc/mach_port_attachment_mac.h"
|
|
|
| +#include "base/mac/mach_logging.h"
|
| +
|
| namespace IPC {
|
| namespace internal {
|
|
|
| MachPortAttachmentMac::MachPortAttachmentMac(mach_port_t mach_port)
|
| - : mach_port_(mach_port) {}
|
| + : mach_port_(mach_port), owns_mach_port_(true) {
|
| + if (mach_port != MACH_PORT_NULL) {
|
| + kern_return_t kr = mach_port_mod_refs(mach_task_self(), mach_port,
|
| + MACH_PORT_RIGHT_SEND, 1);
|
| + MACH_LOG_IF(ERROR, kr != KERN_SUCCESS, kr)
|
| + << "MachPortAttachmentMac mach_port_mod_refs";
|
| + }
|
| +}
|
|
|
| MachPortAttachmentMac::MachPortAttachmentMac(const WireFormat& wire_format)
|
| : BrokerableAttachment(wire_format.attachment_id),
|
| - mach_port_(static_cast<mach_port_t>(wire_format.mach_port)) {}
|
| + mach_port_(static_cast<mach_port_t>(wire_format.mach_port)),
|
| + owns_mach_port_(false) {}
|
|
|
| MachPortAttachmentMac::MachPortAttachmentMac(
|
| const BrokerableAttachment::AttachmentId& id)
|
| - : BrokerableAttachment(id), mach_port_(MACH_PORT_NULL) {}
|
| -
|
| -MachPortAttachmentMac::~MachPortAttachmentMac() {}
|
| + : BrokerableAttachment(id),
|
| + mach_port_(MACH_PORT_NULL),
|
| + owns_mach_port_(false) {}
|
| +
|
| +MachPortAttachmentMac::~MachPortAttachmentMac() {
|
| + if (mach_port_ != MACH_PORT_NULL && owns_mach_port_) {
|
| + kern_return_t kr = mach_port_mod_refs(mach_task_self(), mach_port_,
|
| + MACH_PORT_RIGHT_SEND, -1);
|
| + MACH_LOG_IF(ERROR, kr != KERN_SUCCESS, kr)
|
| + << "~MachPortAttachmentMac mach_port_mod_refs";
|
| + }
|
| +}
|
|
|
| MachPortAttachmentMac::BrokerableType MachPortAttachmentMac::GetBrokerableType()
|
| const {
|
|
|