Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(416)

Unified Diff: ipc/mach_port_attachment_mac.cc

Issue 1385143002: ipc: Update MachPortMac ownership semantics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix rebase errors. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ipc/mach_port_attachment_mac.h ('k') | ipc/mach_port_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
« no previous file with comments | « ipc/mach_port_attachment_mac.h ('k') | ipc/mach_port_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698