// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LOGIN_MANAGER_CHILD_EXIT_HANDLER_H_
#define LOGIN_MANAGER_CHILD_EXIT_HANDLER_H_

#include <signal.h>

#include <vector>

#include <base/compiler_specific.h>
#include <base/macros.h>

struct signalfd_siginfo;

namespace brillo {
class AsynchronousSignalHandler;
}

namespace login_manager {
class JobManagerInterface;

// Listen for SIGCHLD and informs the appropriate object that manages that
// child.
class ChildExitHandler {
 public:
  ChildExitHandler();
  virtual ~ChildExitHandler();

  void Init(brillo::AsynchronousSignalHandler* signal_handler,
            const std::vector<JobManagerInterface*>& managers);
  void Reset();
 private:
  // Called by the |AsynchronousSignalHandler| when a new SIGCHLD is received.
  bool OnSigChld(const struct signalfd_siginfo& info);
  // Determines which JobManagers' child exited, and handles appropriately.
  void Dispatch(const siginfo_t& info);

  // Handler that notifies of signals. Owned by the caller.
  brillo::AsynchronousSignalHandler* signal_handler_;

  // Objects that are managing a child job.
  std::vector<JobManagerInterface*> managers_;

  DISALLOW_COPY_AND_ASSIGN(ChildExitHandler);
};

}  // namespace login_manager

#endif  // LOGIN_MANAGER_CHILD_EXIT_HANDLER_H_
