]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 5046: FreeBSD lacks open(2) O_DSYNC flag (#623)
authorAmos Jeffries <yadij@users.noreply.github.com>
Tue, 5 May 2020 13:57:24 +0000 (13:57 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Tue, 5 May 2020 16:53:05 +0000 (16:53 +0000)
ext_session_acl built with TrivialDB uses O_DSYNC to ensure
thread-safe manipulation of data within the TDB files in Squid
multi-process environment.

FreeBSD lacks this flag entirely. Use the O_SYNC flag as a
backup, which apparently provides file-level synchronization.
It is not clear whether this flag will prevent duplicate keys or
record overwrites in the case of process write race collisions.

NP: this appears to be FreeBSD specific. Other BSD either define
O_DSYNC or lack support for these POSIX flags entirely.

src/acl/external/session/ext_session_acl.cc

index ab28ef012926e8a152b4f971ace6a52fa42b7fe3..4f978e7df86dcebe77859ca0386ba96a4c4f93fe 100644 (file)
@@ -137,6 +137,10 @@ static void init_db(void)
         }
     }
 #elif USE_TRIVIALDB
+#if _SQUID_FREEBSD_ && !defined(O_DSYNC)
+    // FreeBSD lacks O_DSYNC, O_SYNC is closest to correct behaviour
+#define O_DSYNC O_SYNC
+#endif
     db = tdb_open(db_path, 0, TDB_CLEAR_IF_FIRST, O_CREAT|O_DSYNC, 0666);
 #endif
     if (!db) {