lua: subprocess: cancel pending I/O before return

I'm not sure if this is necessary, but it can't hurt, and it's what
you're supposed to do before leaving the stack frame that contains the
OVERLAPPED object and the buffer. If there is no pending I/O, CancelIo
will do nothing and GetOverlappedResult will silently fail.
This commit is contained in:
James Ross-Gowan 2014-11-19 15:46:20 +11:00
parent 92316eb740
commit f2b94a3b49
1 changed files with 7 additions and 2 deletions

View File

@ -1422,9 +1422,14 @@ static int subprocess(char **args, struct mp_cancel *cancel, void *ctx,
done:
for (int i = 0; i < 2; i++) {
if (pipes[i].ol.hEvent) CloseHandle(pipes[i].ol.hEvent);
if (pipes[i].read) CloseHandle(pipes[i].read);
if (pipes[i].read) {
// Cancel any pending I/O (if the process was killed)
CancelIo(pipes[i].read);
GetOverlappedResult(pipes[i].read, &pipes[i].ol, &r, TRUE);
CloseHandle(pipes[i].read);
}
if (pipes[i].write) CloseHandle(pipes[i].write);
if (pipes[i].ol.hEvent) CloseHandle(pipes[i].ol.hEvent);
}
if (pi.hProcess) CloseHandle(pi.hProcess);
talloc_free(tmp);