čt 7. 11. 2019 v 3:42 odesílatel Amit Kapila <amit.kapil...@gmail.com> napsal:
> On Wed, Nov 6, 2019 at 11:46 PM Pavel Stehule <pavel.steh...@gmail.com> > wrote: > > > > st 6. 11. 2019 v 14:59 odesílatel Tom Lane <t...@sss.pgh.pa.us> napsal: > >> > >> Amit Kapila <amit.kapil...@gmail.com> writes: > >> > I think there is still a window where the same problem can happen, say > >> > the signal has been sent by SendProcSignal to the required process and > >> > it releases the ProcArrayLock. Now, the target process exits and a > >> > new process gets the same pid before the signal is received. > >> > >> In principle, no use of Unix signals is ever safe against this sort > >> of race condition --- process A can never know that process B didn't > >> exit immediately before A does kill(B, n). In practice, it's okay > >> because the kernel is expected not to reassign a dead PID for some > >> reasonable grace period [1]. I'd be inclined to lean more heavily > >> on that expectation than anything internal to Postgres. That is, > >> remembering the PID we want to kill for some small number of > >> microseconds is probably a safer API than anything that depends on > >> the contents of the ProcArray, because there indeed *isn't* any > >> guarantee that a ProcArray entry won't be recycled immediately. > >> > > Right, this makes sense. I think I was overly paranoid about this > behavior even though that was used at a few other places as this patch > might need to rely on many pids not being reused after the lock is > released. > > > > > > > so we can return back to just simple killing. > > > > I think so. I think we might want to add a comment about this race > condition and add or reference to comments in pg_signal_backend which > mentions the same race condition. > Please, can you do it. It's bad task for my with my bad English. Thank you Pavel > > -- > With Regards, > Amit Kapila. > EnterpriseDB: http://www.enterprisedb.com >