summaryrefslogtreecommitdiffstats
path: root/libdm/libdm-file.c
diff options
context:
space:
mode:
authorPetr Rockai <prockai@redhat.com>2010-10-20 15:12:12 +0000
committerPetr Rockai <prockai@redhat.com>2010-10-20 15:12:12 +0000
commitd95a85ca360767fa41ede89545a70b2aebcad111 (patch)
treed417f8c88cb648ed6fa319b7de320074c1a307d4 /libdm/libdm-file.c
parentf7311db64f8a0986a3829436894359d0918e1053 (diff)
downloadlvm2-d95a85ca360767fa41ede89545a70b2aebcad111.tar.gz
lvm2-d95a85ca360767fa41ede89545a70b2aebcad111.tar.xz
lvm2-d95a85ca360767fa41ede89545a70b2aebcad111.zip
Implement dmeventd -R, allowing dmeventd to be restarted without losing
monitoring state.
Diffstat (limited to 'libdm/libdm-file.c')
-rw-r--r--libdm/libdm-file.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libdm/libdm-file.c b/libdm/libdm-file.c
index b72b2abe..82fae342 100644
--- a/libdm/libdm-file.c
+++ b/libdm/libdm-file.c
@@ -92,6 +92,7 @@ int dm_create_lockfile(const char *lockfile)
ssize_t write_out;
struct flock lock;
char buffer[50];
+ int retries = 0;
if((fd = open(lockfile, O_CREAT | O_WRONLY,
(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) < 0) {
@@ -112,9 +113,15 @@ retry_fcntl:
break;
case EACCES:
case EAGAIN:
- log_error("Cannot lock lockfile [%s], error was [%s]",
- lockfile, strerror(errno));
- break;
+ if (retries == 20) {
+ log_error("Cannot lock lockfile [%s], error was [%s]",
+ lockfile, strerror(errno));
+ break;
+ } else {
+ ++ retries;
+ usleep(1000);
+ goto retry_fcntl;
+ }
default:
log_error("process is already running");
}