No subject
Sun Nov 18 18:09:07 JST 2012
* A latch is a boolean variable, with operations that let processes sleep
* until it is set. A latch can be set from another process, or a signal
* handler within the same process.
*
* The latch interface is a reliable replacement for the common pattern of
* using pg_usleep() or select() to wait until a signal arrives, where the
* signal handler sets a flag variable. Because on some platforms an
* incoming signal doesn't interrupt sleep, and even on platforms where it
* does there is a race condition if the signal arrives just before
* entering the sleep, the common pattern must periodically wake up and
* poll the flag variable. The pselect() system call was invented to solve
* this problem, but it is not portable enough. Latches are designed to
* overcome these limitations, allowing you to sleep without polling and
* ensuring quick response to signals from other processes.
Currently pgpool's main module uses home brewed latch like code:
static RETSIGTYPE reap_handler(int sig)
{
POOL_SETMASK(&BlockSig);
sigchld_request = 1;
write(pipe_fds[1], "\0", 1);
POOL_SETMASK(&UnBlockSig);
}
This could be replaced by PostgreSQL's latch. Also the communication
between pgpool main process and recovery process can be more reliably
implemented by using latch.
So I believe importing PostgreSQL's latch would enhance pgpool and I
added TODO item for that.
http://www.pgpool.net/mediawiki/index.php/TODO#Import_PostgreSQL.27s_latch_module
Comments are welcome.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp
More information about the pgpool-hackers
mailing list