Free memory for args.

This commit is contained in:
Vincent Richard 2005-05-25 19:20:59 +00:00
parent 9a945f1334
commit b3ddee2ea7
2 changed files with 11 additions and 3 deletions

View File

@ -200,7 +200,7 @@ private:
posixChildProcess::posixChildProcess(const utility::file::path& path)
: m_processPath(path), m_started(false),
m_stdIn(NULL), m_stdOut(NULL), m_pid(0)
m_stdIn(NULL), m_stdOut(NULL), m_pid(0), m_argArray(NULL)
{
m_pipe[0] = 0;
m_pipe[1] = 0;
@ -222,6 +222,8 @@ posixChildProcess::~posixChildProcess()
delete (m_stdIn);
delete (m_stdOut);
delete [] (m_argArray);
}
@ -239,11 +241,14 @@ void posixChildProcess::start(const std::vector <string> args, const int flags)
// Construct C-style argument array
const char** argv = new const char*[args.size() + 2];
m_argVector = args; // for c_str() pointer to remain valid
m_argArray = argv; // to free later
argv[0] = m_processPath.getLastComponent().getBuffer().c_str();
argv[args.size()] = NULL;
for (unsigned int i = 0 ; i < args.size() ; ++i)
argv[i + 1] = args[i].c_str();
for (unsigned int i = 0 ; i < m_argVector.size() ; ++i)
argv[i + 1] = m_argVector[i].c_str();
// Create a pipe to communicate with the child process
int fd[2];

View File

@ -54,6 +54,9 @@ private:
sigset_t m_oldProcMask;
pid_t m_pid;
int m_pipe[2];
std::vector <string> m_argVector;
const char** m_argArray;
};