diff options
| author | Patrick Steinhardt <ps@pks.im> | 2026-04-02 09:31:15 +0200 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2026-04-02 10:45:43 -0700 |
| commit | b45ea595e6f6b03a749abc2c8e508504429a4cf3 (patch) | |
| tree | 0d1402643c17e23d27e7d17334505f32de33e037 /reftable/system.c | |
| parent | 34c17b840d5bdb8060ef6309aee04f919616c9de (diff) | |
| download | git-b45ea595e6f6b03a749abc2c8e508504429a4cf3.tar.xz | |
reftable/stack: provide fsync(3p) via system header
Users of the reftable library are expected to provide their own function
callback in cases they want to sync(3p) data to disk via the reftable
write options. But if no such function was provided we end up calling
fsync(3p) directly, which may not even be available on some systems.
While dropping the explicit call to fsync(3p) would work, it would lead
to an unsafe default behaviour where a project may have forgotten to set
up the callback function, and that could lead to potential data loss. So
this is not a great solution.
Instead, drop the callback function and make it mandatory for the
project to define fsync(3p). In the case of Git, we can then easily
inject our custom implementation via the "reftable-system.h" header so
that we continue to use `fsync_component()`.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'reftable/system.c')
| -rw-r--r-- | reftable/system.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/reftable/system.c b/reftable/system.c index 725a25844e..4d7e366b55 100644 --- a/reftable/system.c +++ b/reftable/system.c @@ -5,6 +5,7 @@ #include "reftable-error.h" #include "../lockfile.h" #include "../tempfile.h" +#include "../write-or-die.h" uint32_t reftable_rand(void) { @@ -131,3 +132,8 @@ int flock_commit(struct reftable_flock *l) return 0; } + +int reftable_fsync(int fd) +{ + return fsync_component(FSYNC_COMPONENT_REFERENCE, fd); +} |
