mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Get rid of the Pid_ member in the Program class.
llvm-svn: 81247
This commit is contained in:
parent
bd38dc207a
commit
d5ee80a911
@ -30,9 +30,7 @@ namespace sys {
|
||||
/// @brief An abstraction for finding and executing programs.
|
||||
class Program {
|
||||
/// Opaque handle for target specific data.
|
||||
void *Data;
|
||||
|
||||
unsigned Pid_;
|
||||
void *Data_;
|
||||
|
||||
// Noncopyable.
|
||||
Program(const Program& other);
|
||||
@ -46,7 +44,7 @@ namespace sys {
|
||||
~Program();
|
||||
|
||||
/// Return process ID of this program.
|
||||
unsigned GetPid() { return Pid_; }
|
||||
unsigned GetPid();
|
||||
|
||||
/// This function executes the program using the \p arguments provided. The
|
||||
/// invoked program will inherit the stdin, stdout, and stderr file
|
||||
|
@ -34,10 +34,14 @@
|
||||
namespace llvm {
|
||||
using namespace sys;
|
||||
|
||||
Program::Program() : Pid_(0) {}
|
||||
Program::Program() : Data_(0) {}
|
||||
|
||||
Program::~Program() {}
|
||||
|
||||
unsigned Program::GetPid() {
|
||||
return reinterpret_cast<unsigned>(Data_);
|
||||
}
|
||||
|
||||
// This function just uses the PATH environment variable to find the program.
|
||||
Path
|
||||
Program::FindProgramByName(const std::string& progName) {
|
||||
@ -209,7 +213,7 @@ Program::Execute(const Path& path,
|
||||
break;
|
||||
}
|
||||
|
||||
Pid_ = child;
|
||||
Data_ = reinterpret_cast<void*>(child);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -221,7 +225,7 @@ Program::Wait(unsigned secondsToWait,
|
||||
#ifdef HAVE_SYS_WAIT_H
|
||||
struct sigaction Act, Old;
|
||||
|
||||
if (Pid_ == 0) {
|
||||
if (Data_ == 0) {
|
||||
MakeErrMsg(ErrMsg, "Process not started!");
|
||||
return -1;
|
||||
}
|
||||
@ -237,7 +241,7 @@ Program::Wait(unsigned secondsToWait,
|
||||
|
||||
// Parent process: Wait for the child process to terminate.
|
||||
int status;
|
||||
int child = this->Pid_;
|
||||
pid_t child = reinterpret_cast<pid_t>(Data_);
|
||||
while (wait(&status) != child)
|
||||
if (secondsToWait && errno == EINTR) {
|
||||
// Kill the child.
|
||||
@ -285,12 +289,13 @@ Program::Wait(unsigned secondsToWait,
|
||||
|
||||
bool
|
||||
Program::Kill(std::string* ErrMsg) {
|
||||
if (Pid_ == 0) {
|
||||
if (Data_ == 0) {
|
||||
MakeErrMsg(ErrMsg, "Process not started!");
|
||||
return true;
|
||||
}
|
||||
|
||||
return (kill(Pid_, SIGKILL) == 0);
|
||||
pid_t pid = reinterpret_cast<pid_t>(Data_);
|
||||
return (kill(pid, SIGKILL) == 0);
|
||||
}
|
||||
|
||||
bool Program::ChangeStdinToBinary(){
|
||||
|
@ -25,16 +25,21 @@
|
||||
namespace llvm {
|
||||
using namespace sys;
|
||||
|
||||
Program::Program() : Pid_(0), Data(0) {}
|
||||
Program::Program() : Data_(0) {}
|
||||
|
||||
Program::~Program() {
|
||||
if (Data) {
|
||||
HANDLE hProcess = (HANDLE) Data;
|
||||
if (Data_) {
|
||||
HANDLE hProcess = reinterpret_cast<HANDLE>(Data_);
|
||||
CloseHandle(hProcess);
|
||||
Data = 0;
|
||||
Data_ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned Program::GetPid() {
|
||||
HANDLE hProcess = reinterpret_cast<HANDLE>(Data_);
|
||||
return GetProcessId(hProcess);
|
||||
}
|
||||
|
||||
// This function just uses the PATH environment variable to find the program.
|
||||
Path
|
||||
Program::FindProgramByName(const std::string& progName) {
|
||||
@ -132,10 +137,10 @@ Program::Execute(const Path& path,
|
||||
const Path** redirects,
|
||||
unsigned memoryLimit,
|
||||
std::string* ErrMsg) {
|
||||
if (Data) {
|
||||
HANDLE hProcess = (HANDLE) Data;
|
||||
CloseHandle(Data);
|
||||
Data = 0;
|
||||
if (Data_) {
|
||||
HANDLE hProcess = reinterpret_cast<HANDLE>(Data_);
|
||||
CloseHandle(Data_);
|
||||
Data_ = 0;
|
||||
}
|
||||
|
||||
if (!path.canExecute()) {
|
||||
@ -264,8 +269,7 @@ Program::Execute(const Path& path,
|
||||
path.str() + "'");
|
||||
return false;
|
||||
}
|
||||
Pid_ = pi.dwProcessId;
|
||||
Data = pi.hProcess;
|
||||
Data_ = reinterpret_cast<void*>(pi.hProcess);
|
||||
|
||||
// Make sure these get closed no matter what.
|
||||
AutoHandle hThread(pi.hThread);
|
||||
@ -301,12 +305,12 @@ Program::Execute(const Path& path,
|
||||
int
|
||||
Program::Wait(unsigned secondsToWait,
|
||||
std::string* ErrMsg) {
|
||||
if (Data == 0) {
|
||||
if (Data_ == 0) {
|
||||
MakeErrMsg(ErrMsg, "Process not started!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
HANDLE hProcess = (HANDLE) Data;
|
||||
HANDLE hProcess = reinterpret_cast<HANDLE>(Data_);
|
||||
|
||||
// Wait for the process to terminate.
|
||||
DWORD millisecondsToWait = INFINITE;
|
||||
@ -337,12 +341,12 @@ Program::Wait(unsigned secondsToWait,
|
||||
|
||||
bool
|
||||
Program::Kill(std::string* ErrMsg) {
|
||||
if (Data == 0) {
|
||||
if (Data_ == 0) {
|
||||
MakeErrMsg(ErrMsg, "Process not started!");
|
||||
return true;
|
||||
}
|
||||
|
||||
HANDLE hProcess = reinterpret_cast<HANDLE>(Data);
|
||||
HANDLE hProcess = reinterpret_cast<HANDLE>(Data_);
|
||||
return TerminateProcess(hProcess, 1);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user