windows shared memory error
От | Andrew Dunstan |
---|---|
Тема | windows shared memory error |
Дата | |
Msg-id | 49FA3B6F.6080906@dunslane.net обсуждение исходный текст |
Ответы |
Re: windows shared memory error
Re: windows shared memory error Re: windows shared memory error |
Список | pgsql-hackers |
I am seeing Postgres 8.3.7 running as a service on Windows Server 2003 repeatedly fail to restart after a backend crash because of the following code in port/win32_shmem.c: /* * If the segment already existed, CreateFileMapping() will return a * handle to the existing one. */ if(GetLastError() == ERROR_ALREADY_EXISTS) { /* * When recycling a shared memory segment, it may take a shortwhile * before it gets dropped from the global namespace. So re-try after * sleeping for a second. */ CloseHandle(hmap); /* Close the old handle, since we got a valid * one to the previous segment. */ Sleep(1000); hmap = CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, 0L, (DWORD) size, szShareMem); if (!hmap) ereport(FATAL, (errmsg("couldnot create shared memory segment: %lu", GetLastError()), errdetail("Failed system call was CreateFileMapping(size=%lu, name=%s).", (unsigned long) size, szShareMem))); if (GetLastError() == ERROR_ALREADY_EXISTS) ereport(FATAL, (errmsg("pre-existing shared memoryblock is still in use"), errhint("Check if there are any old server processes still running, and terminate them."))); } It strikes me that we really need to try reconnecting to the shared memory here several times, and maybe the backoff need to increase each time. On a loaded server this cause postgres to fail to restart fairly reliably. thoughts? cheers andrew
В списке pgsql-hackers по дате отправления: