From: Hanna Reitz <hreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org, Hanna Reitz <hreitz@redhat.com>
Subject: [PULL 35/35] vl: Unlink absolute PID file path
Date: Tue, 12 Jul 2022 20:08:53 +0200 [thread overview]
Message-ID: <20220712180853.1364155-3-hreitz@redhat.com> (raw)
In-Reply-To: <20220712180617.1362407-1-hreitz@redhat.com>
After writing the PID file, we register an exit notifier to unlink it
when the process terminates. However, if the process has changed its
working directory in the meantime (e.g. in os_setup_post() when
daemonizing), this will not work when the PID file path was relative.
Therefore, pass the absolute path (created with realpath()) to the
unlink() call in the exit notifier.
(realpath() needs a path pointing to an existing file, so we cannot use
it before qemu_write_pidfile().)
Reproducer:
$ cd /tmp
$ qemu-system-x86_64 --daemonize --pidfile qemu.pid
$ file qemu.pid
qemu.pid: ASCII text
$ kill $(cat qemu.pid)
$ file qemu.pid
qemu.pid: ASCII text
(qemu.pid should be gone after the process has terminated.)
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20220609122701.17172-4-hreitz@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
softmmu/vl.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 36f46fcdad..aabd82e09a 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -1522,11 +1522,18 @@ machine_parse_property_opt(QemuOptsList *opts_list, const char *propname,
}
static const char *pid_file;
-static Notifier qemu_unlink_pidfile_notifier;
+struct UnlinkPidfileNotifier {
+ Notifier notifier;
+ char *pid_file_realpath;
+};
+static struct UnlinkPidfileNotifier qemu_unlink_pidfile_notifier;
static void qemu_unlink_pidfile(Notifier *n, void *data)
{
- unlink(pid_file);
+ struct UnlinkPidfileNotifier *upn;
+
+ upn = DO_UPCAST(struct UnlinkPidfileNotifier, notifier, n);
+ unlink(upn->pid_file_realpath);
}
static const QEMUOption *lookup_opt(int argc, char **argv,
@@ -2430,13 +2437,28 @@ static void qemu_maybe_daemonize(const char *pid_file)
rcu_disable_atfork();
if (pid_file) {
+ char *pid_file_realpath = NULL;
+
if (!qemu_write_pidfile(pid_file, &err)) {
error_reportf_err(err, "cannot create PID file: ");
exit(1);
}
- qemu_unlink_pidfile_notifier.notify = qemu_unlink_pidfile;
- qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier);
+ pid_file_realpath = g_malloc0(PATH_MAX);
+ if (!realpath(pid_file, pid_file_realpath)) {
+ error_report("cannot resolve PID file path: %s: %s",
+ pid_file, strerror(errno));
+ unlink(pid_file);
+ exit(1);
+ }
+
+ qemu_unlink_pidfile_notifier = (struct UnlinkPidfileNotifier) {
+ .notifier = {
+ .notify = qemu_unlink_pidfile,
+ },
+ .pid_file_realpath = pid_file_realpath,
+ };
+ qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier.notifier);
}
}
--
2.35.3
next prev parent reply other threads:[~2022-07-12 18:58 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-12 18:05 [PULL 00/35] Block patches Hanna Reitz
2022-07-12 18:05 ` [PULL 01/35] block: Add a 'flags' param to bdrv_{pread, pwrite, pwrite_sync}() Hanna Reitz
2022-07-12 18:05 ` [PULL 02/35] block: Change bdrv_{pread, pwrite, pwrite_sync}() param order Hanna Reitz
2022-07-12 18:05 ` [PULL 03/35] block: Make bdrv_{pread,pwrite}() return 0 on success Hanna Reitz
2022-07-12 18:05 ` [PULL 04/35] crypto: Make block callbacks " Hanna Reitz
2022-07-12 18:05 ` [PULL 05/35] block: Make bdrv_co_pwrite() take a const buffer Hanna Reitz
2022-07-12 18:05 ` [PULL 06/35] block: Make 'bytes' param of bdrv_co_{pread, pwrite, preadv, pwritev}() an int64_t Hanna Reitz
2022-07-12 18:05 ` [PULL 07/35] block: Implement bdrv_{pread, pwrite, pwrite_zeroes}() using generated_co_wrapper Hanna Reitz
2022-07-12 18:05 ` [PULL 08/35] block: Add bdrv_co_pwrite_sync() Hanna Reitz
2022-07-12 18:05 ` [PULL 09/35] block: Use bdrv_co_pwrite_sync() when caller is coroutine_fn Hanna Reitz
2022-07-12 18:05 ` [PULL 10/35] block/qcow2: Use bdrv_pwrite_sync() in qcow2_mark_dirty() Hanna Reitz
2022-07-12 18:05 ` [PULL 11/35] tests/qemu-iotests: hotfix for 307, 223 output Hanna Reitz
2022-07-12 18:05 ` [PULL 12/35] tests/qemu-iotests: skip 108 when FUSE is not loaded Hanna Reitz
2022-07-12 18:05 ` [PULL 13/35] block: Make blk_{pread,pwrite}() return 0 on success Hanna Reitz
2022-07-12 18:05 ` [PULL 14/35] block: Add a 'flags' param to blk_pread() Hanna Reitz
2022-07-12 18:05 ` [PULL 15/35] block: Change blk_{pread,pwrite}() param order Hanna Reitz
2022-07-12 18:05 ` [PULL 16/35] block: Make 'bytes' param of blk_{pread, pwrite}() an int64_t Hanna Reitz
2022-07-12 18:05 ` [PULL 17/35] block: Make blk_co_pwrite() take a const buffer Hanna Reitz
2022-07-12 18:06 ` [PULL 18/35] block: Implement blk_{pread, pwrite}() using generated_co_wrapper Hanna Reitz
2022-07-12 18:06 ` [PULL 19/35] block: Add blk_{preadv,pwritev}() Hanna Reitz
2022-07-12 18:06 ` [PULL 20/35] block: Add blk_[co_]preadv_part() Hanna Reitz
2022-07-12 18:06 ` [PULL 21/35] block: Export blk_pwritev_part() in block-backend-io.h Hanna Reitz
2022-07-12 18:06 ` [PULL 22/35] block: Change blk_pwrite_compressed() param order Hanna Reitz
2022-07-12 18:06 ` [PULL 23/35] block: Add blk_co_pwrite_compressed() Hanna Reitz
2022-07-12 18:06 ` [PULL 24/35] block: Implement blk_pwrite_zeroes() using generated_co_wrapper Hanna Reitz
2022-07-12 18:06 ` [PULL 25/35] block: Implement blk_pdiscard() " Hanna Reitz
2022-07-12 18:06 ` [PULL 26/35] block: Implement blk_flush() " Hanna Reitz
2022-07-12 18:06 ` [PULL 27/35] block: Add blk_co_ioctl() Hanna Reitz
2022-07-12 18:06 ` [PULL 28/35] block: Add blk_co_truncate() Hanna Reitz
2022-07-12 18:06 ` [PULL 29/35] block: Reorganize some declarations in block-backend-io.h Hanna Reitz
2022-07-12 18:06 ` [PULL 30/35] block: Remove remaining unused symbols in coroutines.h Hanna Reitz
2022-07-12 18:06 ` [PULL 31/35] qsd: Do not use error_report() before monitor_init Hanna Reitz
2022-07-12 18:06 ` [PULL 32/35] iotests/297: Have mypy ignore unused ignores Hanna Reitz
2022-07-12 18:08 ` [PULL 33/35] qsd: Unlink absolute PID file path Hanna Reitz
2022-07-12 18:08 ` [PULL 34/35] vl: Conditionally register PID file unlink notifier Hanna Reitz
2022-07-12 18:08 ` Hanna Reitz [this message]
2022-07-13 20:47 ` [PULL 00/35] Block patches Peter Maydell
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=20220712180853.1364155-3-hreitz@redhat.com \
--to=hreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.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: link
Be 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 NNTP newsgroup(s).