Re: Interruptible sleeps (was Re: CommitFest 2009-07: Yay, Kevin! Thanks, reviewers!)
Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
From: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>
To: Fujii Masao <masao.fujii@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@postgresql.org
Date: 2010-08-27T08:15:28Z
Lists: pgsql-hackers
On 27/08/10 10:39, Fujii Masao wrote: > On Thu, Aug 26, 2010 at 7:40 PM, Heikki Linnakangas > <heikki.linnakangas@enterprisedb.com> wrote: >> There's two kinds of latches, local and global. Local latches can only be >> set from the same process - allowing you to replace pg_usleep() with >> something that is always interruptible by signals (by setting the latch in >> the signal handler). The global latches work the same, and indeed the >> implementation is the same, but the latch resides in shared memory, and can >> be set by any process attached to shared memory. On Unix, when you set a >> latch waited for by another process, the setter sends SIGUSR1 to the waiting >> process, and the signal handler sends the byte to the self-pipe to wake up >> the select(). > > According to this explanation, the latch which walsender uses seems to be > local. If it's true, walsender should call InitSharedLatch rather than > InitLatch? Yes, it should. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com