public inbox for lvm2-cvs@sourceware.org help / color / mirror / Atom feed
From: agk@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2/libdm libdm-file.c Date: Tue, 27 Jul 2010 21:56:00 -0000 [thread overview] Message-ID: <20100727215615.11638.qmail@sourceware.org> (raw) CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2010-07-27 21:56:14 Modified files: libdm : libdm-file.c Log message: Fix dm_create_lockfile error paths - incorrectly unlinked in-use lockfile. (Jan Friesse) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-file.c.diff?cvsroot=lvm2&r1=1.12&r2=1.13 --- LVM2/libdm/libdm-file.c 2010/07/21 13:40:22 1.12 +++ LVM2/libdm/libdm-file.c 2010/07/27 21:56:14 1.13 @@ -104,21 +104,29 @@ lock.l_start = 0; lock.l_whence = SEEK_SET; lock.l_len = 0; +retry_fcntl: if (fcntl(fd, F_SETLK, &lock) < 0) { - if (errno != EACCES && errno != EAGAIN) + switch (errno) { + case EINTR: + goto retry_fcntl; + break; + case EACCES: + case EAGAIN: log_error("Cannot lock lockfile [%s], error was [%s]", lockfile, strerror(errno)); - else + break; + default: log_error("process is already running"); + } - goto fail; + goto fail_close; } if (ftruncate(fd, 0) < 0) { log_error("Cannot truncate pidfile [%s], error was [%s]", lockfile, strerror(errno)); - goto fail; + goto fail_close_unlink; } memset(buffer, 0, sizeof(buffer)); @@ -131,7 +139,7 @@ log_error("Cannot write pid to pidfile [%s], error was [%s]", lockfile, strerror(errno)); - goto fail; + goto fail_close_unlink; } if ((write_out == 0) || (write_out < bufferlen)) { @@ -139,30 +147,31 @@ "[%" PRIsize_t "] bytes, expected [%" PRIsize_t "]\n", lockfile, write_out, bufferlen); - goto fail; + goto fail_close_unlink; } if ((value = fcntl(fd, F_GETFD, 0)) < 0) { log_error("Cannot get close-on-exec flag from pidfile [%s], " "error was [%s]", lockfile, strerror(errno)); - goto fail; + goto fail_close_unlink; } value |= FD_CLOEXEC; if (fcntl(fd, F_SETFD, value) < 0) { log_error("Cannot set close-on-exec flag from pidfile [%s], " "error was [%s]", lockfile, strerror(errno)); - goto fail; + goto fail_close_unlink; } return 1; -fail: - if (close(fd)) - stack; +fail_close_unlink: if (unlink(lockfile)) stack; +fail_close: + if (close(fd)) + stack; return 0; }
next reply other threads:[~2010-07-27 21:56 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-07-27 21:56 agk [this message] 2012-02-08 12:59 zkabelac
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20100727215615.11638.qmail@sourceware.org \ --to=agk@sourceware.org \ --cc=lvm-devel@redhat.com \ --cc=lvm2-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).