Andreas Pflug <[EMAIL PROTECTED]> writes:
Attached the patch, an orgy in #ifdefs, decorated with various indents and crlf line ends (glad we have pgindent).
I spent a fair amount of time fooling with this, trying to extract something that I trusted enough to apply at this late date, but got stuck on one point. Exiting when the postmaster dies is *not* good enough; we want the logger to stick around until the last process upstream of the logger pipe is gone. In the Unix case we can detect this by watching for EOF on the pipe,
I saw strange errnos coming from that pipe, i.e. EMFILE. I'm not sure if EOF is really reliable.
but I don't know how to do the equivalent in this threaded scheme you've devised for Windows.
if (realStdErr !0 NULL) { ... } #ifdef WIN32 CloseHandle(writePipe); #else close(syslogPipe[1]); #endif
You probably found out yourself.
In pipeThread:
if (!ReadFile(...)) { DWORD error = GetLastError(); if (error == ERROR_HANDLE_EOF) exit(0);
/* errno is not set */ ereport(COMERROR, errmsg("could not read from system logger pipe: %d", error)))} }
(Why is the separate thread needed, again?)
On unnamed pipes, WaitForSingleObject does not work (it always reports "signaled", so the blocking ReadFile won't allow for sighup/IsPostmasterRunning; select is for sockets only).
Regards, Andreas
---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly