Re: pipe chunking vs Windows - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: pipe chunking vs Windows
Date
Msg-id 46AD0A9B.2000401@dunslane.net
Whole thread Raw
In response to pipe chunking vs Windows  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: pipe chunking vs Windows  (Andreas Pflug <pgadmin@pse-consulting.de>)
List pgsql-hackers

korry.douglas wrote:
>
>>> I have not yet succeeded in turning this behaviour off (_setmode() 
>>> didn't seem to affect it). If we can't find a way to turn it off, 
>>> the only solution short of abandoning its use on Windows that I can 
>>> think of is to translate LF on input to something unlikely like 0x1C 
>>> and then translate it back when we read it from the pipe.
>> Did you _setmode() the pipe, _setmode() stderr, or both?  (And did 
>> you try before or after calling dup2()?).
>>
>> It looks like the Win CRT implementation of dup2() copues the "mode" 
>> from the pipe that you've created into stderr.
> Sorry, I was looking at the wrong chunk of code in syslogger.c.
> Why are you calling _open_osfhandle() with O_TEXT?  That looks 
> suspicious giving the problem that you are seeing with CR -> CR/LF 
> translation.
>
>        

I have no idea why that's done - it goes back to the origins of the 
syslogger - probably because someone mistakenly thinks all WIndows text 
files have to have CRLF line endings.

I tried changing that to _O_BINARY, and calling _setmode on both the 
pipe before it's duped into stderr and stderr after the dup and both. 
Nothing seemed to work.

But that's not the only problem. I am now getting log file corruption 
even when I work around the text mode problem by not sending a '\n' at 
all, which makes me think even small packets aren't safely written 
atomically to Windows pipes. I wonder if we'd do better using the (so 
far unused) pipe simulation using sockets that we have. Not sure if we 
can dup a socket into stderr on Windows, but it might be worth trying, 
or even working around that problem. If we could safely use that the 
code would get a whole lot simpler - presumably we would no longer need 
those extra syslogger threads on Windows.

cheers

andrew


pgsql-hackers by date:

Previous
From: Magnus Hagander
Date:
Subject: Re: pipe chunking vs Windows
Next
From: Andreas Pflug
Date:
Subject: Re: pipe chunking vs Windows