| Index: sandbox/mac/mach_message_server.cc
|
| diff --git a/sandbox/mac/mach_message_server.cc b/sandbox/mac/mach_message_server.cc
|
| index 9a10121d19bad04228330ac9783f0ebfbabbd3cf..555ee0f494e9ff9827153f9f784ef8bb6d348431 100644
|
| --- a/sandbox/mac/mach_message_server.cc
|
| +++ b/sandbox/mac/mach_message_server.cc
|
| @@ -17,9 +17,10 @@ namespace sandbox {
|
|
|
| MachMessageServer::MachMessageServer(
|
| MessageDemuxer* demuxer,
|
| + mach_port_t server_receive_right,
|
| mach_msg_size_t buffer_size)
|
| : demuxer_(demuxer),
|
| - server_port_(MACH_PORT_NULL),
|
| + server_port_(server_receive_right),
|
| server_queue_(NULL),
|
| server_source_(NULL),
|
| buffer_size_(
|
| @@ -39,14 +40,17 @@ bool MachMessageServer::Initialize() {
|
| mach_port_t task = mach_task_self();
|
| kern_return_t kr;
|
|
|
| - // Allocate a port for use as a new server port.
|
| - mach_port_t port;
|
| - if ((kr = mach_port_allocate(task, MACH_PORT_RIGHT_RECEIVE, &port)) !=
|
| - KERN_SUCCESS) {
|
| - MACH_LOG(ERROR, kr) << "Failed to allocate new server port.";
|
| - return false;
|
| + // Allocate a port for use as a new server port if one was not passed to the
|
| + // constructor.
|
| + if (!server_port_.is_valid()) {
|
| + mach_port_t port;
|
| + if ((kr = mach_port_allocate(task, MACH_PORT_RIGHT_RECEIVE, &port)) !=
|
| + KERN_SUCCESS) {
|
| + MACH_LOG(ERROR, kr) << "Failed to allocate new server port.";
|
| + return false;
|
| + }
|
| + server_port_.reset(port);
|
| }
|
| - server_port_.reset(port);
|
|
|
| // Allocate the message request and reply buffers.
|
| const int kMachMsgMemoryFlags = VM_MAKE_TAG(VM_MEMORY_MACH_MSG) |
|
|
|