Обсуждение: socket calls in signal handler (WAS: APC + socket restrictions un der Win32?)

Поиск
Список
Период
Сортировка

socket calls in signal handler (WAS: APC + socket restrictions un der Win32?)

От
Claudio Natoli
Дата:
Hi all,

Was just discussing the issues related to the above off list with Magnus:
http://archives.postgresql.org/pgsql-hackers-win32/2004-03/msg00041.php

Whilst we can think of a number of work-arounds (the simplest being a
suggestion by Magnus: set a flag, like APCcalled, to false before the
select() call, and repeat the select() if APCcalled == true on return from
select), we were wondering if having socket calls inside signal handlers was
a good idea in any case?

The specific (and possibly only? are their others?) issue is the call to
pgstat_beterm from reaper/CleanupProc, invoked by a SIGCHLD. Can this call
be deferred to the main loop (ie. ServerLoop) and is there any merit in
doing so? 

[Seems like pgstat_fetch_stat_numbackends could get seriously out of date,
in pathological scenarios... other gotchas?]

Cheers,
Claudio

--- 
Certain disclaimers and policies apply to all email sent from Memetrics.
For the full text of these disclaimers and policies see 
<a
href="http://www.memetrics.com/emailpolicy.html">http://www.memetrics.com/em
ailpolicy.html</a>


Re: socket calls in signal handler (WAS: APC + socket restrictions un der Win32?)

От
Kurt Roeckx
Дата:
On Mon, Mar 08, 2004 at 09:12:52PM +1100, Claudio Natoli wrote:
> 
> Hi all,
> 
> Was just discussing the issues related to the above off list with Magnus:
> http://archives.postgresql.org/pgsql-hackers-win32/2004-03/msg00041.php
> 
> Whilst we can think of a number of work-arounds (the simplest being a
> suggestion by Magnus: set a flag, like APCcalled, to false before the
> select() call, and repeat the select() if APCcalled == true on return from
> select), we were wondering if having socket calls inside signal handlers was
> a good idea in any case?

Is this a win32 only thing, or is it more general?

OpenBSD for instance has some documentation on which functions
are safe to be called from a signal handler, and socket
operations aren't part of it.  See for isntance their manpages
about signal and sigaction.


Kurt