[Geany-Devel] [geany/geany] a3664f: Fix spawning [synchronous] commands on Windows

Nick Treleaven nick.treleaven at btinternet.com
Thu Nov 15 13:06:53 UTC 2012


On 31/10/2012 17:49, Dimitar Zhekov wrote:
> On Fri, 26 Oct 2012 18:44:04 +0100
> Nick Treleaven <nick.treleaven at btinternet.com> wrote:
>
>> On 26/10/2012 17:44, Dimitar Zhekov wrote:
>>> I'm using Geany on win~1 recently, with gtk+2.16 and glib-2.22 (the
>>> minimum versions). g_spawn_async_with_pipes() works fine for me, from a
>>> plugin, for a console application, along with the helper.
>>
>> So redirecting I/O works for stdout, stderr and it works for build
>> commands like gcc, make, grep, etc?
>
> It works between a console program and the plugin that spawned it, with
> {PeekNamedPipe() + read()} and {repeat write() on N ms} calls.

This confused me. Are you saying you use native Windows functions in 
combination with g_spawn? I thought only g_io_add_watch could be used.

>
> Note that instead of EAGAIN, read() may return EINVAL, and write() may
> return ENOSPC. I have no idea how the higher level I/O functions
> respond, and I'm doing async spawn, not sync (though it shoudn't
> differ).
>
> One more thing you must do:
>
> HANDLE h = (HANDLE) _get_osfhandle(fd);
> DWORD state;
>
> if (h != INVALID_HANDLE_VALUE &&
> 	GetNamedPipeHandleState(h, &state, NULL, NULL, NULL, NULL, 0))
> 	{
> 		state |= PIPE_NOWAIT;
> 		if (SetNamedPipeHandleState(h, &state, NULL, NULL))
> 			return TRUE;
> 	}
>
> return FALSE;
>
> for all fd-s used, otherwise read() and write() will block.
>
>> IME it sometimes works and sometimes doesn't, and it might depend on
>> which program is being spawned (e.g. which grep you use). I recently
>> checked the commits on the GLib gspawn-win32 code and there didn't seem
>> to be any relevant fixes.
>
> The anonymous pipe I/O under Win~1 is not marked as deprecated, but all
> documentation says to use overlapped I/O (which is no good for us),
> and the named pipe functions work on anonymous pipes only "for
> compatibility with MS-DOS LAN Manager" (sic!) IIRC, and may be killed
> any time. So it's not much of a glib problem...
>



More information about the Devel mailing list