Skip site navigation (1) Skip section navigation (2)

Re: [PATCHES] New socket code for win32

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Magnus Hagander <mha(at)sollentuna(dot)net>
Cc: pgsql-patches(at)postgresql(dot)org,PostgreSQL Win32 port list <pgsql-hackers-win32(at)postgresql(dot)org>
Subject: Re: [PATCHES] New socket code for win32
Date: 2004-04-12 16:19:40
Message-ID: 200404121619.i3CGJe618070@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-hackers-win32pgsql-patches
Patch applied with later socket.c file used.  Thanks.

This is a major Win32 accomplishment.

---------------------------------------------------------------------------


Magnus Hagander wrote:
> Here's an attempt at new socket and signal code for win32.
> 
> It works on the principle of turning sockets into non-blocking, and then
> emulate blocking behaviour on top of that, while allowing signals to
> run. Signals are now implemented using an event instead of APCs, thus
> getting rid of the issue of APCs not being compatible with "old style"
> sockets functions.
> 
> It also moves the win32 specific code away from pqsignal.h/c into
> port/win32, and also removes the "thread style workaround" of the APC
> issue previously in place.
> 
> In order to make things work, a few things are also changed in pgstat.c:
> 
> 1) There is now a separate pipe to the collector and the bufferer. This
> is required because the pipe will otherwise only be signalled in one of
> the processes when the postmaster goes down. The MS winsock code for
> select() must have some kind of workaround for this behaviour, but I
> have found no stable way of doing that. You really are not supposed to
> use the same socket from more than one process (unless you use
> WSADuplicateSocket(), in which case the docs specifically say that only
> one will be flagged).
> 
> 2) The check for "postmaster death" is moved into a separate select()
> call after the main loop. The previous behaviour select():ed on the
> postmaster pipe, while later explicitly saying "we do NOT check for
> postmaster exit inside the loop". 
> The issue was that the code relies on the same select() call seeing both
> the postmaster pipe *and* the pgstat pipe go away. This does not always
> happen, and it appears that useing WSAEventSelect() makes it even more
> common that it does not.
> Since it's only called when the process exits, I don't think using a
> separate select() call will have any significant impact on how the stats
> collector works.
> 
> 
> 
> Anyway. Here is a patch for review. The two files go in
> backend/port/win32/.
> 
> Passes all regression tests expected (time and ordering ones still
> fails, pgstat works)
> 
> //Magnus

Content-Description: newsignal.patch

[ Attachment, skipping... ]

Content-Description: signal.c

[ Attachment, skipping... ]

Content-Description: socket.c

[ Attachment, skipping... ]

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
>       message can get through to the mailing list cleanly

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman(at)candle(dot)pha(dot)pa(dot)us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

In response to

pgsql-patches by date

Next:From: Andrew DunstanDate: 2004-04-12 16:27:31
Subject: Re: COPY for CSV documentation
Previous:From: Bruce MomjianDate: 2004-04-12 15:59:34
Subject: change for stdin/stdout for \copy

pgsql-hackers-win32 by date

Next:From: Merlin MoncureDate: 2004-04-13 17:43:38
Subject: /contrib
Previous:From: pgsqlDate: 2004-04-12 03:54:15
Subject: Re: [HACKERS] [GENERAL] pg_ctl written in c

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group