// 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 <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>

#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() {
  close(receiver_fd_);
  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) {
    PLOG(ERROR) << "write";
    return false;
  }
  return true;
}

void PipeNotifier::Reset() {
  char c;
  int ret = HANDLE_EINTR(read(receiver_fd_, &c, 1));
  if (ret < 0) {
    PLOG(ERROR) << "read";
    return;
  }
  DCHECK_EQ(1, ret);
  DCHECK_EQ('1', c);
}

}  // namespace forwarder
