[libvirt] [PATCH 02/14] Add virFileLock and virFileUnlock APIs

Daniel P. Berrange berrange at redhat.com
Thu Jul 7 14:17:20 UTC 2011


From: "Daniel P. Berrange" <berrange at redhat.com>

Add some simple wrappers around the fcntl() discretionary file
locking capability.

* src/util/util.c, src/util/util.h, src/libvirt_private.syms: Add
  virFileLock and virFileUnlock APIs
---
 src/libvirt_private.syms |    2 ++
 src/util/util.c          |   33 +++++++++++++++++++++++++++++++++
 src/util/util.h          |    3 +++
 3 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index ae0d199..0746dee 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -993,6 +993,7 @@ virFileFindMountPoint;
 virFileHasSuffix;
 virFileIsExecutable;
 virFileLinkPointsTo;
+virFileLock;
 virFileMakePath;
 virFileMatchesNameSuffix;
 virFileOpenAs;
@@ -1004,6 +1005,7 @@ virFileReadPid;
 virFileResolveLink;
 virFileSanitizePath;
 virFileStripSuffix;
+virFileUnlock;
 virFileWaitForDevices;
 virFileWriteStr;
 virFindFileInPath;
diff --git a/src/util/util.c b/src/util/util.c
index 4710fc5..1d8083f 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -1175,6 +1175,39 @@ int virFileOpenTtyAt(const char *ptmx ATTRIBUTE_UNUSED,
 }
 #endif
 
+
+int virFileLock(int fd, bool shared, off_t start, off_t len)
+{
+    struct flock fl = {
+        .l_type = shared ? F_RDLCK : F_WRLCK,
+        .l_whence = SEEK_SET,
+        .l_start = start,
+        .l_len = len,
+    };
+
+    if (fcntl(fd, F_SETLK, &fl) < 0)
+        return -errno;
+
+    return 0;
+}
+
+
+int virFileUnlock(int fd, off_t start, off_t len)
+{
+    struct flock fl = {
+        .l_type = F_UNLCK,
+        .l_whence = SEEK_SET,
+        .l_start = start,
+        .l_len = len,
+    };
+
+    if (fcntl(fd, F_SETLK, &fl) < 0)
+        return -errno;
+
+    return 0;
+}
+
+
 char* virFilePid(const char *dir, const char* name)
 {
     char *pidfile;
diff --git a/src/util/util.h b/src/util/util.h
index 1555653..820c9ff 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -117,6 +117,9 @@ int virFileOpenTtyAt(const char *ptmx,
                      char **ttyName,
                      int rawmode);
 
+int virFileLock(int fd, bool shared, off_t start, off_t len);
+int virFileUnlock(int fd, off_t start, off_t len);
+
 char* virFilePid(const char *dir,
                  const char *name);
 
-- 
1.7.6




More information about the libvir-list mailing list