lockfile: Improve log message when a process tries to relock a file.
authorBen Pfaff <blp@nicira.com>
Tue, 25 Mar 2014 22:50:14 +0000 (15:50 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 7 Apr 2014 17:23:26 +0000 (10:23 -0700)
"Resource deadlock avoided" is a pretty obscure message.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Alex Wang <alexw@nicira.com>
lib/lockfile.c
tests/lockfile.at

index c83f469..d157bc6 100644 (file)
@@ -122,7 +122,10 @@ lockfile_lock(const char *file, struct lockfile **lockfilep)
         if (error == EACCES) {
             error = EAGAIN;
         }
-        if (pid) {
+        if (pid == getpid()) {
+            VLOG_WARN("%s: cannot lock file because this process has already "
+                      "locked it", lock_name);
+        } else if (pid) {
             VLOG_WARN("%s: cannot lock file because it is already locked by "
                       "pid %ld", lock_name, (long int) pid);
         } else {
@@ -307,6 +310,7 @@ lockfile_try_lock(const char *name, pid_t *pidp, struct lockfile **lockfilep)
     /* Check whether we've already got a lock on that file. */
     if (!stat(name, &s)) {
         if (lockfile_find(s.st_dev, s.st_ino)) {
+            *pidp = getpid();
             return EDEADLK;
         }
     } else if (errno != ENOENT) {
index ba10fd4..2e2a74b 100644 (file)
@@ -14,12 +14,12 @@ CHECK_LOCKFILE([lock_and_unlock], [0])
 CHECK_LOCKFILE([lock_and_unlock_twice], [0])
 
 CHECK_LOCKFILE([lock_blocks_same_process], [0],
-  [lockfile|WARN|.file.~lock~: failed to lock file: Resource deadlock avoided
+  [lockfile|WARN|.file.~lock~: cannot lock file because this process has already locked it
 ])
 
 CHECK_LOCKFILE([lock_blocks_same_process_twice], [0],
-  [lockfile|WARN|.file.~lock~: failed to lock file: Resource deadlock avoided
-lockfile|WARN|.file.~lock~: failed to lock file: Resource deadlock avoided
+  [lockfile|WARN|.file.~lock~: cannot lock file because this process has already locked it
+lockfile|WARN|.file.~lock~: cannot lock file because this process has already locked it
 ])
 
 CHECK_LOCKFILE([lock_blocks_other_process], [1],
@@ -28,7 +28,7 @@ lockfile|WARN|.file.~lock~: cannot lock file because it is already locked by pid
 ])
 
 CHECK_LOCKFILE([lock_twice_blocks_other_process], [1],
-  [lockfile|WARN|.file.~lock~: failed to lock file: Resource deadlock avoided
+  [lockfile|WARN|.file.~lock~: cannot lock file because this process has already locked it
 lockfile|WARN|.file.~lock~: child does not inherit lock
 lockfile|WARN|.file.~lock~: cannot lock file because it is already locked by pid <pid>
 ])
@@ -36,16 +36,16 @@ lockfile|WARN|.file.~lock~: cannot lock file because it is already locked by pid
 CHECK_LOCKFILE([lock_and_unlock_allows_other_process], [1])
 
 CHECK_LOCKFILE([lock_multiple], [0],
-  [lockfile|WARN|.a.~lock~: failed to lock file: Resource deadlock avoided
+  [lockfile|WARN|.a.~lock~: cannot lock file because this process has already locked it
 ])
 
 CHECK_LOCKFILE([lock_symlink], [0],
-  [lockfile|WARN|.a.~lock~: failed to lock file: Resource deadlock avoided
-lockfile|WARN|.b.~lock~: failed to lock file: Resource deadlock avoided
-lockfile|WARN|.b.~lock~: failed to lock file: Resource deadlock avoided
-lockfile|WARN|.a.~lock~: failed to lock file: Resource deadlock avoided
+  [lockfile|WARN|.a.~lock~: cannot lock file because this process has already locked it
+lockfile|WARN|.b.~lock~: cannot lock file because this process has already locked it
+lockfile|WARN|.b.~lock~: cannot lock file because this process has already locked it
+lockfile|WARN|.a.~lock~: cannot lock file because this process has already locked it
 ])
 
 CHECK_LOCKFILE([lock_symlink_to_dir], [0],
-  [lockfile|WARN|dir/.b.~lock~: failed to lock file: Resource deadlock avoided
+  [lockfile|WARN|dir/.b.~lock~: cannot lock file because this process has already locked it
 ])