blob: 70f20b54b5a35f52b99a50ad5a362c4bf67f0c86 [file] [log] [blame]
// Copyright 2011 The Goma 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 DEVTOOLS_GOMA_CLIENT_SUBPROCESS_IMPL_H_
#define DEVTOOLS_GOMA_CLIENT_SUBPROCESS_IMPL_H_
#include <memory>
#include "basictypes.h"
#include "compiler_specific.h"
MSVC_PUSH_DISABLE_WARNING_FOR_PROTO()
#include "prototmp/subprocess.pb.h"
MSVC_POP_WARNING()
#include "spawner.h"
#include "simple_timer.h"
#include "scoped_fd.h"
namespace devtools_goma {
// A SubProcessImpl is associated with a single subprocess.
// It is created and owned by SubProcessControllerServer.
class SubProcessImpl {
public:
SubProcessImpl(const SubProcessReq& req, bool dont_kill_subprocess);
~SubProcessImpl();
SubProcessState::State state() const { return state_; }
const SubProcessReq& req() const { return req_; }
const SubProcessStarted& started() const { return started_; }
SubProcessStarted* Spawn();
void RaisePriority();
// Kills the subprocess.
// Returns true if the subprocess is still running.
// Returns false if the subprocess has been terminated.
// TODO: Return process status by enum.
bool Kill();
void Signaled(int status);
// Waits for the subprocess termination.
// If |need_kill| is true, it will kill the subprocess.
// Returns SubProcessTerminated object if the subprocess has been terminated.
// Returns NULL if the subprocess is still running.
std::unique_ptr<SubProcessTerminated> Wait(bool need_kill);
private:
SubProcessState::State state_;
SubProcessReq req_;
SubProcessStarted started_;
SubProcessTerminated terminated_;
std::unique_ptr<Spawner> spawner_;
SimpleTimer timer_;
bool kill_subprocess_;
DISALLOW_COPY_AND_ASSIGN(SubProcessImpl);
};
} // namespace devtools_goma
#endif // DEVTOOLS_GOMA_CLIENT_SUBPROCESS_IMPL_H_