Re: How to handle waitingForLock in LockWaitCancel()
От | Hiroshi Inoue |
---|---|
Тема | Re: How to handle waitingForLock in LockWaitCancel() |
Дата | |
Msg-id | 3AA44808.870E21F9@tpf.co.jp обсуждение исходный текст |
Ответ на | How to handle waitingForLock in LockWaitCancel() (Hiroshi Inoue <Inoue@tpf.co.jp>) |
Ответы |
Re: How to handle waitingForLock in LockWaitCancel()
|
Список | pgsql-hackers |
Tom Lane wrote: > > Hiroshi Inoue <Inoue@tpf.co.jp> writes: > > [ backtrace snipped ] > > Hmm, this is definitely not operating as intended: LockWaitCancel is > getting interrupted, because ProcessInterrupts may be called when it's > trying to acquire the lockmanager spinlock, and ProcessInterrupts will > see the ProcDiePending flag already set. I think the correct fix (or > at least part of it) is in postgres.c's die(): > > /* > * If it's safe to interrupt, and we're waiting for input or a lock, > * service the interrupt immediately > */ > if (ImmediateInterruptOK && InterruptHoldoffCount == 0 && > CritSectionCount == 0) > { > + /* bump holdoff count to make ProcessInterrupts() a no-op */ > + /* until we are done getting ready for it */ > + InterruptHoldoffCount++; > DisableNotifyInterrupt(); > /* Make sure HandleDeadLock won't run while shutting down... */ > LockWaitCancel(); > + InterruptHoldoffCount--; > ProcessInterrupts(); > } > > QueryCancelHandler probably needs similar additions. > Agreed. Adding similar code to QueryCancelHandler seems sufficient. > I suspect you will find that these crashes occur during the window just > after Sorry what does 'just after' mean ? Isn't it during the semop() ? > the semop() call in IpcSemaphoreLock() --- see the comment Regards, Hiroshi Inoue
В списке pgsql-hackers по дате отправления: