blob: 5d802b8bff9721224756d53f670bdbab26af6dcb [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ipc/mojo_event.h"
namespace IPC {
MojoEvent::MojoEvent() {
mojo::MessagePipe pipe;
signal_handle_ = std::move(pipe.handle0);
wait_handle_ = std::move(pipe.handle1);
}
MojoEvent::~MojoEvent() {}
void MojoEvent::Signal() {
base::AutoLock lock(lock_);
if (is_signaled_)
return;
is_signaled_ = true;
MojoResult rv = mojo::WriteMessageRaw(
signal_handle_.get(), nullptr, 0, nullptr, 0,
MOJO_WRITE_MESSAGE_FLAG_NONE);
CHECK_EQ(rv, MOJO_RESULT_OK);
}
void MojoEvent::Reset() {
base::AutoLock lock(lock_);
if (!is_signaled_)
return;
is_signaled_ = false;
MojoResult rv = mojo::ReadMessageRaw(
wait_handle_.get(), nullptr, nullptr, nullptr, nullptr,
MOJO_READ_MESSAGE_FLAG_NONE);
CHECK_EQ(rv, MOJO_RESULT_OK);
}
} // namespace IPC