Don't call OwnLatch while holding a spinlock. OwnLatch can elog() under

some "can't happen" scenarios, and spinlocks should only be held for
a few instructions anyway. As pointed out by Fujii Masao.
This commit is contained in:
Heikki Linnakangas 2010-09-15 06:51:19 +00:00
parent 4e97631e6a
commit 1eab7a560d
1 changed files with 6 additions and 6 deletions

View File

@ -28,7 +28,7 @@
* Portions Copyright (c) 2010-2010, PostgreSQL Global Development Group
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.31 2010/09/14 13:35:14 heikki Exp $
* $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.32 2010/09/15 06:51:19 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@ -511,15 +511,15 @@ InitWalSnd(void)
else
{
/*
* Found a free slot. Take ownership of the latch and initialize
* the other fields.
* Found a free slot. Reserve it for us.
*/
OwnLatch((Latch *) &walsnd->latch);
walsnd->pid = MyProcPid;
MemSet(&walsnd->sentPtr, 0, sizeof(XLogRecPtr));
/* Set MyWalSnd only after it's fully initialized. */
MyWalSnd = (WalSnd *) walsnd;
SpinLockRelease(&walsnd->mutex);
/* don't need the lock anymore */
OwnLatch((Latch *) &walsnd->latch);
MyWalSnd = (WalSnd *) walsnd;
break;
}
}