Re: Interruptible sleeps (was Re: CommitFest 2009-07: Yay, Kevin! Thanks, reviewers!)

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Jeff Davis <pgsql@j-davis.com>
Cc: Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>, pgsql-hackers@postgresql.org, Fujii Masao <masao.fujii@gmail.com>, Magnus Hagander <magnus@hagander.net>
Date: 2010-09-12T16:29:00Z
Lists: pgsql-hackers
Jeff Davis <pgsql@j-davis.com> writes:
> I glanced at the code, and I see (in OwnLatch()):

> +       if (latch->owner_pid != 0)
> +               elog(ERROR, "latch already owned");
> +       latch->owner_pid = MyProcPid;

> But it looks like there may be a race there.

Yeah, that error check is only intended to catch gross logic errors,
not to guard against race conditions.  I don't think we really could
prevent a race there without adding a spinlock, which seems like
overkill.

> ... 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?

			regards, tom lane