process function cause handle leak?

Started by iNPRwANG, April 11, 2012, 12:22:39 AM

Previous topic - Next topic

iNPRwANG

System is Windows xp, while loop call of the "process" function of newlisp 10.4.2, you may saw that the "Handle Count" of Task manager increment every call.



    I have readed the source of win32-util.c:69, the "CreateProcess" systemcall return a PROCESS_INFORMATION

struct, the function call return the hProcess of this struct. I try to add a "CloseHandle" function call to close the hThread of this struct and recompile the newlisp, it looks work good.



    Is this a leak?  : )




UINT winPipedProcess(char * cmd, int inpipe, int outpipe, int option)
{
STARTUPINFO si = { 0 };
PROCESS_INFORMATION process;
int result;
long fin, fout;

if(inpipe == -1 && outpipe == -1)
    {
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    si.wShowWindow = option;
    memset(&process, 0, sizeof(process));
    }
else
    {
    /* GetStartupInfo(&si);  */
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    si.wShowWindow = option; /* SW_SHOW, SW_HIDE  get additional user option in Win32 versions */

    fin = _get_osfhandle(inpipe);
    fout = _get_osfhandle(outpipe);

    si.hStdInput = (inpipe) ? (HANDLE)fin : GetStdHandle(STD_INPUT_HANDLE);
    si.hStdOutput = (outpipe) ? (HANDLE)fout : GetStdHandle(STD_OUTPUT_HANDLE);
    si.hStdError = (outpipe) ? (HANDLE)fout : GetStdHandle(STD_OUTPUT_HANDLE);
    }

if((result = CreateProcess(NULL,cmd,NULL,NULL,TRUE,DETACHED_PROCESS,NULL,NULL,&si, &process)) == 0)
    return(0);

//Try close hThread here
CloseHandle(process.hThread);
return((UINT)process.hProcess);
}