bitcoin/bitcoin — pull request #3327 by laanwj (2013-11-28 11:58:53+00:00)
Title: MacOSX leveldb corruption fix

Here's the gist of what's going wrong:

1. PosixMmapFile is used for performing sequential writes. Internally, it maps
regions of the file one after the other. Each region is unmapped before the
next region is mapped.

2. In some circumstances on OS X, the unmapped data is not written to disk.

The fix is to perform a msync before the munmap on OS X, which seems to be where
this issue manifests itself most.

Note: Simply performing a write with the `sync' option is not a sufficient fix
because the sync will happen after the munmap.

See also: http://hackingdistributed.com/2013/11/27/bitcoin-leveldb/