Skip to content
  • Rob Swindell's avatar
    We must explicitly set _FILE_OFFSET_BITS=64 to use Linux OFD locks · f615f2e3
    Rob Swindell authored
    The Linux lock() implementation in xpdev/filewrap.c requires that
    _FILE_OFFSET_BITS is set to 64 or else OFD (sane) locks are not
    used on Linux, defaulting back to the crazy per-process file region
    locking of Linux of old. This was done in this commit:
    http://cvs.synchro.net/commitlog.ssjs?99999#39639
    because:
    https://patchwork.kernel.org/patch/9289177/
    
    but on 64-bit Linux, large file support is assumed and you don't
    actually need to define _FILE_OFFFSET_BITS, we're peforming this
    check for 32-bit Linuxes. Perhaps a check to see if sizeof(off_t)
    == 8 would have been better. However, this change enables OFD
    Locks for *all* flavors of Linux (not just 64-bit) - so that's
    better.
    
    Why do we care? Because using region locks on the same file in
    a multi-threaded program doesn't really work right on Linux without
    using OFD Locks. I saw this problem with receiving multiple
    simultaneous emails in the mailserver and getting smb_locksmbhdr()
    errors/failures when trying to save the message data or headers
    of the one or more messages every time GitLab would send email
    out to those whoe have opted-in to received email notifications
    upon gitlab.synchro.net activity.
    f615f2e3