On Thu, Dec 17, 2015 at 1:51 PM, Kenan Yao <k...@pivotal.io> wrote:

> Hi there,
>
> In function ProcSleep, after the process has been waken up, either with
> lock granted or deadlock detected, it would re-acquire the lock table's
> partition LWLock.
>
> The code episode is here:
>
> /*
>      * Re-acquire the lock table's partition lock.  We have to do this to hold
>      * off cancel/die interrupts before we can mess with lockAwaited (else we
>      * might have a missed or duplicated locallock update).
>      */
>     LWLockAcquire(partitionLock, LW_EXCLUSIVE);
>
>     /*
>      * We no longer want LockErrorCleanup to do anything.
>      */
>     lockAwaited = NULL;
>
>     /*
>      * If we got the lock, be sure to remember it in the locallock table.
>      */
>     if (MyProc->waitStatus == STATUS_OK)
>         GrantAwaitedLock();
>
>     /*
>      * We don't have to do anything else, because the awaker did all the
>      * necessary update of the lock table and MyProc.
>      */
>     return MyProc->waitStatus;
>
> ​
> Questions are:
>
> (1) The comment says that "we might have a missed or duplicated locallock
> update", in what cases would we hit this if without holding the LWLock?
>
> (2) The comment says "we have to do this to hold off cancel/die
> interrupts", then:
>
>    - why using LWLockAcquire instead of HOLD_INTERRUPTS directly?
>    - From the handler of SIGINT and SIGTERM, seems nothing serious would
>    be processed here, since no CHECK_FOR_INTERRUPS is called before releasing
>    this LWLock. Why we should hold off cancel/die interrupts here?
>
> (3) Before releasing this LWLock, the only share memory access is
> MyProc->waitStatus; since the process has been granted the lock or removed
> from the lock's waiting list because of deadlock, is it possible some other
> processes would access this field? if not, then why we need LWLock here?
> what does this lock protect?
>
>
I think the other thing which needs protection of LWLock is
access to proclock which is done in the caller
(LockAcquireExtended).




With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

Reply via email to