// Copyright (c) 2012 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 "tools/android/forwarder2/pipe_notifier.h" #include #include #include #include #include "base/logging.h" #include "base/posix/eintr_wrapper.h" #include "base/safe_strerror_posix.h" namespace forwarder2 { PipeNotifier::PipeNotifier() { int pipe_fd[2]; int ret = pipe(pipe_fd); CHECK_EQ(0, ret); receiver_fd_ = pipe_fd[0]; sender_fd_ = pipe_fd[1]; fcntl(sender_fd_, F_SETFL, O_NONBLOCK); } PipeNotifier::~PipeNotifier() { (void) HANDLE_EINTR(close(receiver_fd_)); (void) HANDLE_EINTR(close(sender_fd_)); } bool PipeNotifier::Notify() { CHECK_NE(-1, sender_fd_); errno = 0; int ret = HANDLE_EINTR(write(sender_fd_, "1", 1)); if (ret < 0) { LOG(WARNING) << "Error while notifying pipe. " << safe_strerror(errno); return false; } return true; } } // namespace forwarder