From: | "Andrew Dunstan" <andrew(at)dunslane(dot)net> |
---|---|
To: | "pgsql-hackers-win32" <pgsql-hackers-win32(at)postgresql(dot)org> |
Subject: | Re: signals on windows |
Date: | 2003-10-10 11:28:51 |
Message-ID: | 000f01c38f21$aeebfd60$6401a8c0@DUNSLANE |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers-win32 |
Thanks. I think for now the most portable and simple thing we can do in
initdb is simply to have the signal handler set a flag that is checked for
every so often. That's what my current code does. See
http://www.dunslane.net/~andrew/initdb.c
If you think this won't work on Windows please let me know - I'm quite
confident it will work elsewhere.
cheers
andrew
----- Original Message -----
From: "Marsh Ray" <marsh-pg(at)mysteray(dot)com>
To: "Bruce Momjian" <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: "Andrew Dunstan" <andrew(at)dunslane(dot)net>; "pgsql-hackers-win32"
<pgsql-hackers-win32(at)postgresql(dot)org>
Sent: Friday, October 10, 2003 12:09 AM
Subject: Re: [pgsql-hackers-win32] signals on windows
> Hi,
> This MS documentation looks like it's slightly retro. I've been trying
> to decypher this stuff myself for a decade, so I might offer some points:.
>
> >Andrew Dunstan wrote:
> >
> >
> >> * Note SIGINT is not supported for any Win32 application, including
> >>* Windows 98/Me and Windows NT/2000/XP.When a CTRL+C interrupt occurs,
> >> * Win32 operating systems generate a new thread to specifically
handle
> >> * that interrupt. This can cause a single-thread application such as
> >>UNIX,
> >> * to become multithreaded, resulting in unexpected behavior.
> >>
> Odd. First they say it's not supported, then they go on to define how it
> works. Probably what they mean is that Win32 _GUI_ applications have no
> way to have receive SIGINT from Ctrl+C, because that's handled as just
> another keystroke by the GUI system (sometimes you'll see the older
> documentation use Win32 as a term implying GUI). Win32 console apps
> appear to respond to Ctrl+C much like unices do.
>
> Since Win32 will create a new thread for you, if you prepare your app
> for that, I don't see a reason you can't make pure Win32 system calls
> from that thread. You mainly want to be careful to not confuse a
> single-threaded C runtime. Note that the doc
>
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_CRT_signal.asp
> says not to "use any function that generates a system call (e.g.,
> *_getcwd*, *time*)", it doesn't say not to make system calls themselves.
> It doesn't look like a "signal" is not a kernel primitive on NT, it's a
> feature of the CRT implemented in userspace with lower-level OS
primitives.
>
> >> * I have no idea how to handle this. (Strange they call UNIX an
> >>application!)
> >> * So this will need some testing on Windows.
> >> * One alternative might be to set a flag that we periodically check
for.
> >>
> A kernel Event
>
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/ba
se/createevent.asp)
> is a common tool for this sort of thing.
>
> - Marsh
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Dunstan | 2003-10-10 11:50:06 | Re: [HACKERS] initdb |
Previous Message | Marsh Ray | 2003-10-10 04:09:40 | Re: signals on windows |