On Mon, Oct 11, 2021 at 11:54 AM Fujii Masao <masao.fu...@oss.nttdata.com> wrote: > > How about modifying SharedInvalBackendInit() so that it accepts > BackendId as an argument and allocates the ProcState entry of > the specified BackendId? That is, the startup process determines > that its BackendId is "MaxBackends + MyAuxProcType (=StartupProcess) + 1" > in AuxiliaryProcessMain(), and then it passes that BackendId to > SharedInvalBackendInit() in InitRecoveryTransactionEnvironment().
If we do the above, then the problem might arise if somebody calls SICleanupQueue and wants to signal the startup process, the below code (from SICleanupQueue) can't get the startup process backend id. So, the backend id calculation for the startup process can't just be MaxBackends + MyAuxProcType + 1. BackendId his_backendId = (needSig - &segP->procState[0]) + 1; > Maybe you need to enlarge ProcState array so that it also handles > auxiliary processes if it does not for now. It looks like we need to increase the size of the ProcState array by 1 at least (for the startup process). Currently the ProcState array doesn't have entries for auxiliary processes, it does have entries for MaxBackends. The startup process is eating up one slot from MaxBackends. Since we need only an extra ProcState array slot for the startup process I think we could just extend its size by 1. Instead of modifying the MaxBackends definition, we can just add 1 (and a comment saying this 1 is for startup process) to shmInvalBuffer->maxBackends in SInvalShmemSize, CreateSharedInvalidationState. IMO, this has to go in a separate patch and probably in a separate thread. Thoughts? Regards, Bharath Rupireddy.