Hi, On 2021-08-09 22:57:18 +0000, Bossart, Nathan wrote:
> @@ -1026,6 +1031,18 @@ PostmasterMain(int argc, char *argv[]) > */ > InitializeMaxBackends(); > > + if (output_shmem) > + { > + char output[64]; > + Size size; > + > + size = CreateSharedMemoryAndSemaphores(true); > + sprintf(output, "%zu", size); > + > + puts(output); > + ExitPostmaster(0); > + } I don't like putting this into PostmasterMain(). Either BootstrapMain() (specifically checker mode) or GucInfoMain() seem like better places. > -void > -CreateSharedMemoryAndSemaphores(void) > +Size > +CreateSharedMemoryAndSemaphores(bool size_only) > { > PGShmemHeader *shim = NULL; > > @@ -161,6 +161,9 @@ CreateSharedMemoryAndSemaphores(void) > /* might as well round it off to a multiple of a typical page > size */ > size = add_size(size, 8192 - (size % 8192)); > > + if (size_only) > + return size; > + > elog(DEBUG3, "invoking IpcMemoryCreate(size=%zu)", size); > > /* > @@ -288,4 +291,6 @@ CreateSharedMemoryAndSemaphores(void) > */ > if (shmem_startup_hook) > shmem_startup_hook(); > + > + return 0; > } That seems like an ugly API to me. Why don't we split the size determination and shmem creation functions into two? Greetings, Andres Freund