From: "Daniel P. Berrangé" <berrange@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: qemu-devel@nongnu.org, airlied@redhat.com, kraxel@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 09/29] qio: add qio_channel_command_new_spawn_with_pre_exec()
Date: Tue, 28 Aug 2018 16:09:05 +0100 [thread overview]
Message-ID: <20180828150905.GC31005@redhat.com> (raw)
In-Reply-To: <20180713130916.4153-10-marcandre.lureau@redhat.com>
On Fri, Jul 13, 2018 at 03:08:56PM +0200, Marc-André Lureau wrote:
> Add a new function to let caller do some tuning thanks to a callback
> before exec().
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> 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
Missing the new args
> + *
> + * 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);
I have a slight preference for using a typedef for the callback signature,
and providing API docs explaining the contract.
eg the callback should call _exit() if something happens that it can't
handle
> +
> /**
> * 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.129.ge3331758f1
>
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2018-08-28 15:09 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-13 13:08 [Qemu-devel] [PATCH v4 00/29] vhost-user for input & GPU Marc-André Lureau
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 01/29] chardev: avoid crash if no associated address Marc-André Lureau
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 02/29] chardev: remove qemu_chr_fe_read_all() counter Marc-André Lureau
2018-08-28 15:05 ` Daniel P. Berrangé
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 03/29] chardev: unref if underlying chardev has no parent Marc-André Lureau
2018-08-28 15:06 ` Daniel P. Berrangé
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 04/29] dmabuf: add y0_top, pass it to spice Marc-André Lureau
2018-08-21 6:25 ` Gerd Hoffmann
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 05/29] vhost-user: simplify vhost_user_init/vhost_user_cleanup Marc-André Lureau
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 06/29] libvhost-user: exit by default on VHOST_USER_NONE Marc-André Lureau
2018-08-28 13:12 ` Jens Freimann
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 07/29] vhost-user: wrap some read/write with retry handling Marc-André Lureau
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 08/29] Add vhost-user-backend Marc-André Lureau
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 09/29] qio: add qio_channel_command_new_spawn_with_pre_exec() Marc-André Lureau
2018-08-28 15:09 ` Daniel P. Berrangé [this message]
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 10/29] HACK: vhost-user-backend: allow to specify binary to execute Marc-André Lureau
2018-08-28 15:44 ` Daniel P. Berrangé
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 11/29] vhost-user: split vhost_user_read() Marc-André Lureau
2018-08-28 15:46 ` Daniel P. Berrangé
2018-07-13 13:08 ` [Qemu-devel] [PATCH v4 12/29] vhost-user: add vhost_user_input_get_config() Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 13/29] libvhost-user: export vug_source_new() Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 14/29] contrib: add vhost-user-input Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 15/29] Add vhost-user-input-pci Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 16/29] vhost-user: add vhost_user_gpu_set_socket() Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 17/29] vhost-user: add vhost_user_gpu_get_num_capsets() Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 18/29] virtio: add virtio-gpu bswap helpers header Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 19/29] util: promote qemu_egl_rendernode_open() to libqemuutil Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 20/29] util: add qemu_write_pidfile() Marc-André Lureau
2018-08-28 15:52 ` Daniel P. Berrangé
2018-08-28 16:04 ` Marc-André Lureau
2018-08-31 10:42 ` Daniel P. Berrangé
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 21/29] util: use fcntl() for qemu_write_pidfile() locking Marc-André Lureau
2018-08-28 15:59 ` Daniel P. Berrangé
2018-08-28 16:07 ` Marc-André Lureau
2018-08-28 23:41 ` Marc-André Lureau
2018-08-29 8:12 ` Daniel P. Berrangé
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 22/29] contrib: add vhost-user-gpu Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 23/29] virtio-gpu: remove unused qdev Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 24/29] virtio-gpu: remove unused config_size Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 25/29] virtio-gpu: block both 2d and 3d rendering Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 26/29] virtio-gpu: remove useless 'waiting' field Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 27/29] virtio-gpu: split virtio-gpu, introduce virtio-gpu-base Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 28/29] virtio-gpu: split virtio-gpu-pci & virtio-vga Marc-André Lureau
2018-07-13 13:09 ` [Qemu-devel] [PATCH v4 29/29] hw/display: add vhost-user-vga & gpu-pci Marc-André Lureau
2018-08-29 9:13 ` Daniel P. Berrangé
2018-08-14 23:26 ` [Qemu-devel] [PATCH v4 00/29] vhost-user for input & GPU Marc-André Lureau
2018-08-21 7:51 ` Gerd Hoffmann
2018-08-21 10:10 ` Marc-André Lureau
2018-08-21 10:13 ` Daniel P. Berrangé
2018-08-28 10:49 ` Marc-André Lureau
2018-08-29 9:50 ` Daniel P. Berrangé
2018-08-29 10:22 ` Dr. David Alan Gilbert
2018-08-29 10:37 ` Daniel P. Berrangé
2018-08-29 11:34 ` Marc-André Lureau
2018-09-07 13:11 ` Marc-André Lureau
2018-09-11 8:59 ` Gerd Hoffmann
2018-09-11 9:16 ` Marc-André Lureau
2018-09-11 10:44 ` Gerd Hoffmann
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=20180828150905.GC31005@redhat.com \
--to=berrange@redhat.com \
--cc=airlied@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@redhat.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.