On 14-Apr-20 8:44 PM, Dmitry Kozlyuk wrote:
EAL common code uses file locking and truncation. Introduce
OS-independent wrappers in order to support both Linux/FreeBSD
and Windows:
* eal_file_lock: lock or unlock an open file.
* eal_file_truncate: enforce a given size for an open file.
Wrappers follow POSIX semantics, but interface is not POSIX,
so that it can be made more clean, e.g. by not mixing locking
operation and behaviour on conflict.
Implementation for Linux and FreeBSD is placed in "unix" subdirectory,
which is intended for common code between the two. Files should be named
after the ones from which the code is factored in OS subdirectory.
Signed-off-by: Dmitry Kozlyuk <dmitry.kozl...@gmail.com>
---
lib/librte_eal/common/eal_private.h | 45 ++++++++++++++++
lib/librte_eal/meson.build | 4 ++
lib/librte_eal/unix/eal.c | 47 ++++++++++++++++
lib/librte_eal/unix/meson.build | 6 +++
lib/librte_eal/windows/eal.c | 83 +++++++++++++++++++++++++++++
5 files changed, 185 insertions(+)
create mode 100644 lib/librte_eal/unix/eal.c
create mode 100644 lib/librte_eal/unix/meson.build
diff --git a/lib/librte_eal/common/eal_private.h
b/lib/librte_eal/common/eal_private.h
index ddcfbe2e4..65d61ff13 100644
--- a/lib/librte_eal/common/eal_private.h
+++ b/lib/librte_eal/common/eal_private.h
@@ -443,4 +443,49 @@ rte_option_usage(void);
uint64_t
eal_get_baseaddr(void);
+/** File locking operation. */
+enum eal_flock_op {
+ EAL_FLOCK_SHARED, /**< Acquire a shared lock. */
+ EAL_FLOCK_EXCLUSIVE, /**< Acquire an exclusive lock. */
+ EAL_FLOCK_UNLOCK /**< Release a previously taken lock. */
+};
+
+/** Behavior on file locking conflict. */
+enum eal_flock_mode {
+ EAL_FLOCK_WAIT, /**< Wait until the file gets unlocked to lock it. */
+ EAL_FLOCK_RETURN /**< Return immediately if the file is locked. */
+};
Nitpicking, but why not blocking/unblocking? The terminology seems
pretty standard.
--
Thanks,
Anatoly