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: Jeff Davis <pgsql@j-davis.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@postgresql.org, Fujii Masao <masao.fujii@gmail.com>, Magnus Hagander <magnus@hagander.net>
Date: 2010-09-13T06:10:29Z
Lists: pgsql-hackers
On 12/09/10 20:13, Jeff Davis wrote: > On Sun, 2010-09-12 at 12:29 -0400, Tom Lane wrote: >>> ... why throw an ERROR there if it can't happen (or >>> indicates an inconsistent state when it does happen)? >> >> Are you suggesting that an Assert would be sufficient? > > I'm not too picky about whether it's Assert, ERROR, or PANIC (Asserts > aren't available in production systems, which I assume is why elog was > used); Right, OwnLatch is a not performance-critical, so it's better to elog() IMHO. > but we should be consistent and document that: > (a) it shouldn't happen > (b) that it's just a sanity check and we're ignoring the race Would this be sufficient? --- a/src/backend/port/unix_latch.c +++ b/src/backend/port/unix_latch.c @@ -156,6 +156,7 @@ OwnLatch(volatile Latch *latch) if (selfpipe_readfd == -1) initSelfPipe(); + /* sanity check */ if (latch->owner_pid != 0) elog(ERROR, "latch already owned"); latch->owner_pid = MyProcPid; Or you want to suggest something better? -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com