| Index: sandbox/mac/mach_message_server.cc
|
| diff --git a/sandbox/mac/mach_message_server.cc b/sandbox/mac/mach_message_server.cc
|
| index cbd991635bb63f3cd39efcb588681ac89feb3870..5a733577f310c4ba9f8edbce7a1761d2ce572107 100644
|
| --- a/sandbox/mac/mach_message_server.cc
|
| +++ b/sandbox/mac/mach_message_server.cc
|
| @@ -12,6 +12,7 @@
|
| #include "base/logging.h"
|
| #include "base/mac/mach_logging.h"
|
| #include "base/strings/stringprintf.h"
|
| +#include "sandbox/mac/dispatch_source_mach.h"
|
|
|
| namespace sandbox {
|
|
|
| @@ -21,9 +22,6 @@ MachMessageServer::MachMessageServer(
|
| mach_msg_size_t buffer_size)
|
| : demuxer_(demuxer),
|
| server_port_(server_receive_right),
|
| - server_queue_(NULL),
|
| - server_source_(NULL),
|
| - source_canceled_(dispatch_semaphore_create(0)),
|
| buffer_size_(
|
| mach_vm_round_page(buffer_size + sizeof(mach_msg_audit_trailer_t))),
|
| did_forward_message_(false) {
|
| @@ -31,15 +29,6 @@ MachMessageServer::MachMessageServer(
|
| }
|
|
|
| MachMessageServer::~MachMessageServer() {
|
| - if (server_source_) {
|
| - dispatch_source_cancel(server_source_);
|
| - dispatch_release(server_source_);
|
| -
|
| - dispatch_semaphore_wait(source_canceled_, DISPATCH_TIME_FOREVER);
|
| - dispatch_release(source_canceled_);
|
| - }
|
| - if (server_queue_)
|
| - dispatch_release(server_queue_);
|
| }
|
|
|
| bool MachMessageServer::Initialize() {
|
| @@ -78,18 +67,11 @@ bool MachMessageServer::Initialize() {
|
| reply_buffer_.reset(buffer, buffer_size_);
|
|
|
| // Set up the dispatch queue to service the bootstrap port.
|
| - // TODO(rsesek): Specify DISPATCH_QUEUE_SERIAL, in the 10.7 SDK. NULL means
|
| - // the same thing but is not symbolically clear.
|
| std::string label = base::StringPrintf(
|
| "org.chromium.sandbox.MachMessageServer.%p", demuxer_);
|
| - server_queue_ = dispatch_queue_create(label.c_str(), NULL);
|
| - server_source_ = dispatch_source_create(DISPATCH_SOURCE_TYPE_MACH_RECV,
|
| - server_port_.get(), 0, server_queue_);
|
| - dispatch_source_set_event_handler(server_source_, ^{ ReceiveMessage(); });
|
| - dispatch_source_set_cancel_handler(server_source_, ^{
|
| - dispatch_semaphore_signal(source_canceled_);
|
| - });
|
| - dispatch_resume(server_source_);
|
| + dispatch_source_.reset(new DispatchSourceMach(
|
| + label.c_str(), server_port_.get(), ^{ ReceiveMessage(); }));
|
| + dispatch_source_->Resume();
|
|
|
| return true;
|
| }
|
|
|