Hi,
I ran into an issue using Geany on Windows where-in using either the build
or compile
commands to kick off a custom script caused Geany to hang for about a
minute, after
which it returned and the compiler log showed only a fraction of the output
it should.
After tracking this down, it seems that on Windows, a custom spawn function
is used
in *build_spawn_cmd* and rather than *
g_spawn_async_with_pipes, utils_spawn_sync*
which ends up calling *win32_spawn*.
*win32_spawn* would set up pipes for stdout and stderr (using default buffer
size),
kick off the a child process, wait for it finish, and finally dump the
stdout/stderr pipes
to a temp file and then read that into memory. if the process didn't exit
after a minute,
it was forcefully killed.
The problem seems to be that pipes are only 4kb buffered by default, so any
process
needing to write more than this would block while writing to stdout and
Geany would
kill it, as it wasn't reading the pipes until after the process exited.
The attached patch fixes this such that the pipes are read and dumped to the
temp
file continuously as the child process runs. Now the child process will be
forcibly killed
only if it doesn't write to one of its pipes for at least 30 seconds.
Out of curiosity, why isn't *g_spawn_async_with_pipes* used on Windows? It
seems to
work with some degree of success for the grep command (as used by *
search_find_in_files*),
albeit without completion status reporting.
Regards,
Josh Pschorr