[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 07/26] qio: add qio_channel_command_new_spawn_wit
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH v3 07/26] qio: add qio_channel_command_new_spawn_with_pre_exec() |
Date: |
Mon, 18 Jun 2018 18:17:10 +0200 |
Add a new function to let caller do some tuning thanks to a callback
before exec().
Signed-off-by: Marc-André Lureau <address@hidden>
---
include/io/channel-command.h | 18 ++++++++++++++++++
io/channel-command.c | 33 ++++++++++++++++++++++++++-------
2 files changed, 44 insertions(+), 7 deletions(-)
diff --git a/include/io/channel-command.h b/include/io/channel-command.h
index 336d47fa5c..96c833daab 100644
--- a/include/io/channel-command.h
+++ b/include/io/channel-command.h
@@ -71,6 +71,24 @@ qio_channel_command_new_pid(int writefd,
int readfd,
pid_t pid);
+/**
+ * qio_channel_command_new_spawn_with_pre_exec:
+ * @argv: the NULL terminated list of command arguments
+ * @flags: the I/O mode, one of O_RDONLY, O_WRONLY, O_RDWR
+ * @errp: pointer to a NULL-initialized error object
+ *
+ * Create a channel for performing I/O with the
+ * command to be spawned with arguments @argv.
+ *
+ * Returns: the command channel object, or NULL on error
+ */
+QIOChannelCommand *
+qio_channel_command_new_spawn_with_pre_exec(const char *const argv[],
+ int flags,
+ void (*pre_exec_cb)(void *),
+ void *data,
+ Error **errp);
+
/**
* qio_channel_command_new_spawn:
* @argv: the NULL terminated list of command arguments
diff --git a/io/channel-command.c b/io/channel-command.c
index 3e7eb17eff..05903ff194 100644
--- a/io/channel-command.c
+++ b/io/channel-command.c
@@ -46,9 +46,12 @@ qio_channel_command_new_pid(int writefd,
#ifndef WIN32
QIOChannelCommand *
-qio_channel_command_new_spawn(const char *const argv[],
- int flags,
- Error **errp)
+qio_channel_command_new_spawn_with_pre_exec(const char *const argv[],
+ int flags,
+ void (*pre_exec_cb)(void *),
+ void *data,
+ Error **errp)
+
{
pid_t pid = -1;
int stdinfd[2] = { -1, -1 };
@@ -104,6 +107,10 @@ qio_channel_command_new_spawn(const char *const argv[],
close(devnull);
}
+ if (pre_exec_cb) {
+ pre_exec_cb(data);
+ }
+
execv(argv[0], (char * const *)argv);
_exit(1);
}
@@ -139,12 +146,13 @@ qio_channel_command_new_spawn(const char *const argv[],
}
return NULL;
}
-
#else /* WIN32 */
QIOChannelCommand *
-qio_channel_command_new_spawn(const char *const argv[],
- int flags,
- Error **errp)
+qio_channel_command_new_spawn_with_pre_exec(const char *const argv[],
+ int flags,
+ void (*pre_exec_cb)(void *),
+ void *data,
+ Error **errp)
{
error_setg_errno(errp, ENOSYS,
"Command spawn not supported on this platform");
@@ -152,6 +160,17 @@ qio_channel_command_new_spawn(const char *const argv[],
}
#endif /* WIN32 */
+
+QIOChannelCommand *
+qio_channel_command_new_spawn(const char *const argv[],
+ int flags,
+ Error **errp)
+{
+ return qio_channel_command_new_spawn_with_pre_exec(argv, flags,
+ NULL, NULL, errp);
+}
+
+
#ifndef WIN32
static int qio_channel_command_abort(QIOChannelCommand *ioc,
Error **errp)
--
2.18.0.rc1
- [Qemu-devel] [PATCH v3 03/26] dmabuf: add y0_top, pass it to spice, (continued)
- [Qemu-devel] [PATCH v3 03/26] dmabuf: add y0_top, pass it to spice, Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 04/26] vhost-user: simplify vhost_user_init/vhost_user_cleanup, Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 05/26] libvhost-user: exit by default on VHOST_USER_NONE, Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 06/26] vhost-user: wrap some read/write with retry handling, Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 09/26] HACK: vhost-user-backend: allow to specify binary to execute, Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 07/26] qio: add qio_channel_command_new_spawn_with_pre_exec(),
Marc-André Lureau <=
- [Qemu-devel] [PATCH v3 08/26] Add vhost-user-backend, Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 10/26] vhost-user: split vhost_user_read(), Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 11/26] vhost-user: add vhost_user_input_get_config(), Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 12/26] libvhost-user: export vug_source_new(), Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 13/26] contrib: add vhost-user-input, Marc-André Lureau, 2018/06/18
- [Qemu-devel] [PATCH v3 14/26] Add vhost-user-input-pci, Marc-André Lureau, 2018/06/18