| Index: sandbox/mac/mach_message_server.cc
|
| diff --git a/sandbox/mac/mach_message_server.cc b/sandbox/mac/mach_message_server.cc
|
| index fd16b6d7b709a75129ea299412b680053bd145e9..cbd991635bb63f3cd39efcb588681ac89feb3870 100644
|
| --- a/sandbox/mac/mach_message_server.cc
|
| +++ b/sandbox/mac/mach_message_server.cc
|
| @@ -108,6 +108,25 @@ pid_t MachMessageServer::GetMessageSenderPID(IPCMessage request) {
|
| return sender_pid;
|
| }
|
|
|
| +IPCMessage MachMessageServer::CreateReply(IPCMessage request_message) {
|
| + mach_msg_header_t* request = request_message.mach;
|
| +
|
| + IPCMessage reply_message;
|
| + mach_msg_header_t* reply = reply_message.mach =
|
| + reinterpret_cast<mach_msg_header_t*>(reply_buffer_.address());
|
| + bzero(reply, buffer_size_);
|
| +
|
| + reply->msgh_bits = MACH_MSGH_BITS_REMOTE(reply->msgh_bits);
|
| + // Since mach_msg will automatically swap the request and reply ports,
|
| + // undo that.
|
| + reply->msgh_remote_port = request->msgh_remote_port;
|
| + reply->msgh_local_port = MACH_PORT_NULL;
|
| + // MIG servers simply add 100 to the request ID to generate the reply ID.
|
| + reply->msgh_id = request->msgh_id + 100;
|
| +
|
| + return reply_message;
|
| +}
|
| +
|
| bool MachMessageServer::SendReply(IPCMessage reply) {
|
| kern_return_t kr = mach_msg(reply.mach, MACH_SEND_MSG,
|
| reply.mach->msgh_size, 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE,
|
| @@ -133,7 +152,8 @@ void MachMessageServer::ForwardMessage(IPCMessage message,
|
| }
|
| }
|
|
|
| -void MachMessageServer::RejectMessage(IPCMessage reply, int error_code) {
|
| +void MachMessageServer::RejectMessage(IPCMessage request, int error_code) {
|
| + IPCMessage reply = CreateReply(request);
|
| mig_reply_error_t* error_reply =
|
| reinterpret_cast<mig_reply_error_t*>(reply.mach);
|
| error_reply->Head.msgh_size = sizeof(mig_reply_error_t);
|
| @@ -173,19 +193,9 @@ void MachMessageServer::ReceiveMessage() {
|
| return;
|
| }
|
|
|
| - // Set up a reply message in case it will be used.
|
| - reply->msgh_bits = MACH_MSGH_BITS_REMOTE(reply->msgh_bits);
|
| - // Since mach_msg will automatically swap the request and reply ports,
|
| - // undo that.
|
| - reply->msgh_remote_port = request->msgh_remote_port;
|
| - reply->msgh_local_port = MACH_PORT_NULL;
|
| - // MIG servers simply add 100 to the request ID to generate the reply ID.
|
| - reply->msgh_id = request->msgh_id + 100;
|
| -
|
| // Process the message.
|
| IPCMessage request_message = { request };
|
| - IPCMessage reply_message = { reply };
|
| - demuxer_->DemuxMessage(request_message, reply_message);
|
| + demuxer_->DemuxMessage(request_message);
|
|
|
| // Free any descriptors in the message body. If the message was forwarded,
|
| // any descriptors would have been moved out of the process on send. If the
|
|
|