Re: BUG #2406: Not all systems support SHM_SHARE_MMU
От | Paul van der Zwan |
---|---|
Тема | Re: BUG #2406: Not all systems support SHM_SHARE_MMU |
Дата | |
Msg-id | 9AC81D3F-10F3-4F0A-9057-FC82F35658F1@Sun.COM обсуждение исходный текст |
Ответ на | Re: BUG #2406: Not all systems support SHM_SHARE_MMU (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-bugs |
On 25-apr-2006, at 16:46, Tom Lane wrote: > Paul van der Zwan <Paul.Vanderzwan@Sun.COM> writes: >> AFAIK getpagesizes() appeared in 2001 so that probably means it is >> missing in anything before Solaris 9. > > We could handle this without relying on getpagesizes() by just trying > and falling back: > > #ifdef SHM_SHARE_MMU > memAddress = shmat(shmid, addr, SHM_SHARE_MMU); > if (memAddress == (void *) -1 && errno == EINVAL) > memAddress = shmat(shmid, addr, 0); > #else > memAddress = shmat(shmid, addr, 0); > #endif > That would be a clean solution ( and was suggested by some of my colleagues as well) > However, I would argue that a system is pretty broken if it exposes > the > SHM_SHARE_MMU #define and then rejects it at runtime. It is just a define, the fact that this define exists has nothing to do with it having any meaning. It's not like a HAVE_ISM flag. shmat() can fail for a number of reasons, one of them is not having ISM available on the current system. > >> I'll see if I can get the x86 experts here to have a look at it... > > I think either Solaris/x86 should not expose this #define, or it > should > silently ignore the bit at runtime. AFAICS, SHM_SHARE_MMU has no > guaranteed semantic effect anyway, it's just a performance hint; so > ignoring it on platforms that can't handle it is reasonable. > I disagree, I have no definite info why it is a hard failure, probably because there is no way to communicate to the app that it's request is ignored. System calls either fail or succeed. And introducing a new errno value just for this is overkill, I guess. > regards, tom lane Regards Paul
В списке pgsql-bugs по дате отправления: