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