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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ipc/mach_port_attachment_mac.h" 5 #include "ipc/mach_port_attachment_mac.h"
6 6
7 #include "base/mac/mach_logging.h"
8
7 namespace IPC { 9 namespace IPC {
8 namespace internal { 10 namespace internal {
9 11
10 MachPortAttachmentMac::MachPortAttachmentMac(mach_port_t mach_port) 12 MachPortAttachmentMac::MachPortAttachmentMac(mach_port_t mach_port)
11 : mach_port_(mach_port) {} 13 : mach_port_(mach_port), owns_mach_port_(true) {
14 if (mach_port != MACH_PORT_NULL) {
15 kern_return_t kr = mach_port_mod_refs(mach_task_self(), mach_port,
16 MACH_PORT_RIGHT_SEND, 1);
17 MACH_LOG_IF(ERROR, kr != KERN_SUCCESS, kr)
18 << "MachPortAttachmentMac mach_port_mod_refs";
19 }
20 }
12 21
13 MachPortAttachmentMac::MachPortAttachmentMac(const WireFormat& wire_format) 22 MachPortAttachmentMac::MachPortAttachmentMac(const WireFormat& wire_format)
14 : BrokerableAttachment(wire_format.attachment_id), 23 : BrokerableAttachment(wire_format.attachment_id),
15 mach_port_(static_cast<mach_port_t>(wire_format.mach_port)) {} 24 mach_port_(static_cast<mach_port_t>(wire_format.mach_port)),
25 owns_mach_port_(false) {}
16 26
17 MachPortAttachmentMac::MachPortAttachmentMac( 27 MachPortAttachmentMac::MachPortAttachmentMac(
18 const BrokerableAttachment::AttachmentId& id) 28 const BrokerableAttachment::AttachmentId& id)
19 : BrokerableAttachment(id), mach_port_(MACH_PORT_NULL) {} 29 : BrokerableAttachment(id),
30 mach_port_(MACH_PORT_NULL),
31 owns_mach_port_(false) {}
20 32
21 MachPortAttachmentMac::~MachPortAttachmentMac() {} 33 MachPortAttachmentMac::~MachPortAttachmentMac() {
34 if (mach_port_ != MACH_PORT_NULL && owns_mach_port_) {
35 kern_return_t kr = mach_port_mod_refs(mach_task_self(), mach_port_,
36 MACH_PORT_RIGHT_SEND, -1);
37 MACH_LOG_IF(ERROR, kr != KERN_SUCCESS, kr)
38 << "~MachPortAttachmentMac mach_port_mod_refs";
39 }
40 }
22 41
23 MachPortAttachmentMac::BrokerableType MachPortAttachmentMac::GetBrokerableType() 42 MachPortAttachmentMac::BrokerableType MachPortAttachmentMac::GetBrokerableType()
24 const { 43 const {
25 return MACH_PORT; 44 return MACH_PORT;
26 } 45 }
27 46
28 MachPortAttachmentMac::WireFormat MachPortAttachmentMac::GetWireFormat( 47 MachPortAttachmentMac::WireFormat MachPortAttachmentMac::GetWireFormat(
29 const base::ProcessId& destination) const { 48 const base::ProcessId& destination) const {
30 return WireFormat(static_cast<uint32_t>(mach_port_), destination, 49 return WireFormat(static_cast<uint32_t>(mach_port_), destination,
31 GetIdentifier()); 50 GetIdentifier());
32 } 51 }
33 52
34 } // namespace internal 53 } // namespace internal
35 } // namespace IPC 54 } // namespace IPC
OLDNEW
« 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