On Jul 10, 2011, at 4:15 PM, Jeff Davis <pg...@j-davis.com> wrote:
> On Mon, 2011-06-27 at 10:13 -0400, Robert Haas wrote:
>> I didn't get a lot of comments on my the previous version of my patch
>> to accelerate table locks.
>> 
>> http://archives.postgresql.org/pgsql-hackers/2011-06/msg00953.php
>> 
>> Here's a new version anyway.  In this version, I have:
> 
> I am trying to figure out holdsStrongLockCount. It's declared as an
> integer, but (unless cscope is failing me) is only ever set to 0 or 1.
> It's never incremented or decremented. It looks like it's supposed to be
> a boolean indicating that the lock should decrement something in
> FastPathStrongLocks when released.

Yes.

> Furthermore, in AtPrepare_Locks(), the comment says:
> 
> /*
> * Arrange not to release any strong lock count held by this lock
> * entry.  We must retain the count until the prepared transaction
> * is committed or rolled back.
> */
> locallock->holdsStrongLockCount = 0;
> 
> But doesn't seem to "arrange" much, as far as I can tell.

Well, it arranges not to release the strong lock count when the LOCALLOCK is 
nuked; instead, we need to release it when the final COMMIT PREPARED or 
ROLLBACK PREPARED happens.

> I think the 2PC code is still correct, because it infers from the
> lockmode that the FastPathStrongLocks counter needs to be incremented.
> However, why doesn't other code (RemoveLocalLock is the only reader)
> make a similar inference?

Because you could hit an ERROR in LockAcquire, and you need to know, at the 
time you clean up the LOCALLOCK, whether or not a strong lock count had been 
acquired.  I didn't originally have holdsStrongLockCount, but it seemed really 
fragile that way.

...Robert
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to