cfg: Fix cfg_unlock() to remove the lockfile unconditionally.
authorBen Pfaff <blp@nicira.com>
Wed, 11 Mar 2009 21:43:53 +0000 (14:43 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 11 Mar 2009 21:44:57 +0000 (14:44 -0700)
Calling remove_lockfile() does the wrong thing here, because it only
removes stale lockfiles.  Here, the lockfile is not stale, because we know
that we own it.  Therefore, we can remove it unconditionally.

lib/cfg.c
lib/lockfile.c

index 4a1e0a0389ec0b124faa77f932bf9a20e4c93086..ae07356b9dd944cfc1adf23184a1438d8dac211a 100644 (file)
--- a/lib/cfg.c
+++ b/lib/cfg.c
@@ -255,9 +255,9 @@ cfg_unlock(void)
 {
     if (lock_fd != -1) {
         close(lock_fd);
+        unlink(lock_name);
+        lock_fd = -1;
     }
-    remove_lockfile(lock_name);
-    lock_fd = -1;
 }
 
 /* Config may change, so caller responsible for notifying others if it
index 031f2453c9914f578ecb9c3abfbd6bc69eae8305..370567c99aa65e42eba128357b31f7ce38dd5788 100644 (file)
@@ -28,7 +28,9 @@ fcntl_lock(int fd)
     return fcntl(fd, F_SETLK, &l) == -1 ? errno : 0;
 }
 
-/* Remove the lockfile with 'name'. */
+/* Remove the lockfile with 'name', if it is stale.  Returns 0 if successful,
+ * otherwise a negative errno value if the lockfile is fresh or if it otherwise
+ * cannot be removed. */
 int
 remove_lockfile(const char *name)
 {