[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: make returning spurious 4522468 errors
From: |
Eli Zaretskii |
Subject: |
Re: make returning spurious 4522468 errors |
Date: |
Fri, 08 Jan 2010 13:52:52 +0200 |
> Date: Thu, 07 Jan 2010 15:08:12 -0800
> From: tom honermann <address@hidden>
>
> Based on a brief glance at the code, I'm guessing that the value
> returned by one of the calls to 'GetExitCodeProcess' in
> 'w32/subproc/sub_proc.c' is somehow getting lost or corrupted. There
> are two calls to 'GetExitCodeProcess', both of which look very similar
> to this:
>
> DWORD ierr;
> GetExitCodeResult = GetExitCodeProcess(childhand, &ierr);
> if (ierr == CONTROL_C_EXIT) {
> pproc->signal = SIGINT;
> } else {
> pproc->exit_code = ierr;
> }
> if (GetExitCodeResult == FALSE) {
> pproc->last_err = GetLastError();
> pproc->lerrno = E_SCALL;
> }
>
> Two things stand out to me here:
>
> 1: 'pproc->exit_code' is assigned the value of 'ierr' regardless of
> whether the call to 'GetExitCodeProcess' is successful or not. If
> 'GetExitCodeProcess' fails, it may not assign to 'ierr' at all - which
> could result in 'pproc->exit_code' getting assigned an uninitialized
> value (since 'ierr' is not assigned a value)
If you plumb these holes and rebuild Make, does the problem go away?
If it does, I will be more than happy to include your suggested
changes in the development sources.
> 2: There is no check for 'ierr' being assigned 'STILL_ACTIVE'. It may
> be that other parts of the code ensure that 'GetExitCodeProcess' is
> never called for an uncompleted process, I haven't looked for that.
Make waits for finished subprocess with WaitForMultipleObjects, and
only calls GetExitCodeProcess if a process exited. So this shouldn't
be a problem.
Thanks.