Port: Replace flock with fnctl
authorMichael Jeanson <mjeanson@efficios.com>
Wed, 14 Oct 2015 20:11:48 +0000 (16:11 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 19 Oct 2015 04:14:08 +0000 (00:14 -0400)
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/utils.c

index ca4eb44481c7d3e7fc90500c91112f50aaacef09..52fb25dbe7202a3af44d1548ea1b021b2ad7ee65 100644 (file)
@@ -504,11 +504,13 @@ int utils_create_lock_file(const char *filepath)
 {
        int ret;
        int fd;
 {
        int ret;
        int fd;
+       struct flock lock;
 
        assert(filepath);
 
 
        assert(filepath);
 
-       fd = open(filepath, O_CREAT,
-               O_WRONLY | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+       memset(&lock, 0, sizeof(lock));
+       fd = open(filepath, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR |
+               S_IRGRP | S_IWGRP);
        if (fd < 0) {
                PERROR("open lock file %s", filepath);
                ret = -1;
        if (fd < 0) {
                PERROR("open lock file %s", filepath);
                ret = -1;
@@ -520,8 +522,12 @@ int utils_create_lock_file(const char *filepath)
         * already a process using the same lock file running
         * and we should exit.
         */
         * already a process using the same lock file running
         * and we should exit.
         */
-       ret = flock(fd, LOCK_EX | LOCK_NB);
-       if (ret) {
+       lock.l_whence = SEEK_SET;
+       lock.l_type = F_WRLCK;
+
+       ret = fcntl(fd, F_SETLK, &lock);
+       if (ret == -1) {
+               PERROR("fcntl lock file");
                ERR("Could not get lock file %s, another instance is running.",
                        filepath);
                if (close(fd)) {
                ERR("Could not get lock file %s, another instance is running.",
                        filepath);
                if (close(fd)) {
This page took 0.025337 seconds and 4 git commands to generate.