This was fixed in LMDB 0.9.9, except: If both O_DIRECT and
F_NOCACHE are #defined, both are used. Looks a bit strange.
Maybe just one should be used in that case. (Which?) Also I'm
still wondering if env_open needs to fail if F_NOCACHE fails.
Anyway, maybe it should be something like this. The "else {}"
is in case O_DIRECT is an unsupported dummy definiton:
#ifdef O_DIRECT
if ((rc = fcntl(newfd, F_GETFL)) != -1)
(void) fcntl(newfd, F_SETFL, rc | O_DIRECT);
else
#endif
{
#ifdef F_NOCACHE /* __APPLE__ */
(void) fcntl(newfd, F_NOCACHE, 1);
#endif
}
--
Hallvard