On 2017-06-06 23:24:50 +0200, Petr Jelinek wrote: > On 06/06/17 23:17, Andres Freund wrote: > > Right. I found a couple more instance of similarly iffy, although not > > quite as broken, patterns in launcher.c. It's easy to get this wrong, > > but it's a lot easy if you do it differently everywhere you use a > > latch. It's not good if code in the same file, by the same author(s), > > has different ways of using latches. > > Huh? I see same pattern everywhere in launcher.c, what am I missing?
WaitForReplicationWorkerAttach: while (...) CHECK_FOR_INTERRUPTS(); /* other stuff including returns */ WaitLatch() WL_POSTMASTER_DEATH ResetLatch() logicalrep_worker_stop loop 1: while (...) /* other stuff */ CHECK_FOR_INTERRUPTS() WaitLatch() POSTMASTER_DEATH ResetLatch() /* other stuff including returns */ logicalrep_worker_stop loop 1: while (...) /* other stuff including returns */ CHECK_FOR_INTERRUPTS(); WaitLatch() WL_POSTMASTER_DEATH ResetLatch() ApplyLauncherMain: while (!got_SIGTERM) /* lots other stuff */ WaitLatch() WL_POSTMASTER_DEATH /* some other stuff */ ResetLatch() (note no CFI) they're not hugely different, but subtely there are differences. Sometimes you're guaranteed to check for interrupts after resetting the latch, in other cases not. Sometimes expensive-ish things happen before a CFI... Greetings, Andres Freund -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers