All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Steve Sistare <steven.sistare@oracle.com>
Cc: qemu-devel@nongnu.org, "Michael Roth" <michael.roth@amd.com>,
	"Peter Xu" <peterx@redhat.com>, "Fabiano Rosas" <farosas@suse.de>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: Re: [PATCH V4 5/5] migration: simplify exec migration functions
Date: Wed, 21 Feb 2024 14:10:33 +0100	[thread overview]
Message-ID: <87r0h63quu.fsf@pond.sub.org> (raw)
In-Reply-To: <1705099758-211963-6-git-send-email-steven.sistare@oracle.com> (Steve Sistare's message of "Fri, 12 Jan 2024 14:49:18 -0800")

Het Gala, Peter, or Fabiano, please review.

Steve Sistare <steven.sistare@oracle.com> writes:

> Simplify the exec migration code by using list utility functions.
>
> As a side effect, this also fixes a minor memory leak.  On function return,
> "g_auto(GStrv) argv" frees argv and each element, which is wrong, because
> the function does not own the individual elements.  To compensate, the code
> uses g_steal_pointer which NULLs argv and prevents the destructor from
> running, but argv is leaked.
>
> Fixes: cbab4face57b ("migration: convert exec backend ...")
> Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
> ---
>  migration/exec.c | 58 ++++++++------------------------------------------------
>  1 file changed, 8 insertions(+), 50 deletions(-)
>
> diff --git a/migration/exec.c b/migration/exec.c
> index 47d2f3b..1312ca7 100644
> --- a/migration/exec.c
> +++ b/migration/exec.c
> @@ -19,12 +19,12 @@
>  
>  #include "qemu/osdep.h"
>  #include "qemu/error-report.h"
> +#include "qemu/strList.h"
>  #include "channel.h"
>  #include "exec.h"
>  #include "migration.h"
>  #include "io/channel-command.h"
>  #include "trace.h"
> -#include "qemu/cutils.h"
>  
>  #ifdef WIN32
>  const char *exec_get_cmd_path(void)
> @@ -39,51 +39,16 @@ const char *exec_get_cmd_path(void)
>  }
>  #endif
>  
> -/* provides the length of strList */
> -static int
> -str_list_length(strList *list)
> -{
> -    int len = 0;
> -    strList *elem;
> -
> -    for (elem = list; elem != NULL; elem = elem->next) {
> -        len++;
> -    }
> -
> -    return len;
> -}
> -
> -static void
> -init_exec_array(strList *command, char **argv, Error **errp)
> -{
> -    int i = 0;
> -    strList *lst;
> -
> -    for (lst = command; lst; lst = lst->next) {
> -        argv[i++] = lst->value;
> -    }
> -
> -    argv[i] = NULL;
> -    return;
> -}
> -
>  void exec_start_outgoing_migration(MigrationState *s, strList *command,
>                                     Error **errp)
>  {
> -    QIOChannel *ioc;
> -
> -    int length = str_list_length(command);
> -    g_auto(GStrv) argv = (char **) g_new0(const char *, length + 1);
> -
> -    init_exec_array(command, argv, errp);
> +    QIOChannel *ioc = NULL;
> +    g_auto(GStrv) argv = strv_from_strList(command);
> +    const char * const *args = (const char * const *) argv;
>      g_autofree char *new_command = g_strjoinv(" ", (char **)argv);
>  
>      trace_migration_exec_outgoing(new_command);
> -    ioc = QIO_CHANNEL(
> -        qio_channel_command_new_spawn(
> -                            (const char * const *) g_steal_pointer(&argv),
> -                            O_RDWR,
> -                            errp));
> +    ioc = QIO_CHANNEL(qio_channel_command_new_spawn(args, O_RDWR, errp));
>      if (!ioc) {
>          return;
>      }
> @@ -105,19 +70,12 @@ static gboolean exec_accept_incoming_migration(QIOChannel *ioc,
>  void exec_start_incoming_migration(strList *command, Error **errp)
>  {
>      QIOChannel *ioc;
> -
> -    int length = str_list_length(command);
> -    g_auto(GStrv) argv = (char **) g_new0(const char *, length + 1);
> -
> -    init_exec_array(command, argv, errp);
> +    g_auto(GStrv) argv = strv_from_strList(command);
> +    const char * const *args = (const char * const *) argv;
>      g_autofree char *new_command = g_strjoinv(" ", (char **)argv);
>  
>      trace_migration_exec_incoming(new_command);
> -    ioc = QIO_CHANNEL(
> -        qio_channel_command_new_spawn(
> -                            (const char * const *) g_steal_pointer(&argv),
> -                            O_RDWR,
> -                            errp));
> +    ioc = QIO_CHANNEL(qio_channel_command_new_spawn(args, O_RDWR, errp));
>      if (!ioc) {
>          return;
>      }



  reply	other threads:[~2024-02-21 15:32 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-12 22:49 [PATCH V4 0/5] string list functions Steve Sistare
2024-01-12 22:49 ` [PATCH V4 1/5] util: strList_from_string Steve Sistare
2024-02-21 13:29   ` Markus Armbruster
2024-02-21 17:01     ` Steven Sistare
2024-02-22 19:46       ` Steven Sistare
2024-01-12 22:49 ` [PATCH V4 2/5] qapi: QAPI_LIST_LENGTH Steve Sistare
2024-02-21 13:29   ` Markus Armbruster
2024-02-21 17:01     ` Steven Sistare
2024-01-12 22:49 ` [PATCH V4 3/5] util: strv_from_strList Steve Sistare
2024-02-21 13:14   ` Markus Armbruster
2024-02-21 17:01     ` Steven Sistare
2024-01-12 22:49 ` [PATCH V4 4/5] util: strList unit tests Steve Sistare
2024-02-21 13:19   ` Markus Armbruster
2024-02-21 17:01     ` Steven Sistare
2024-01-12 22:49 ` [PATCH V4 5/5] migration: simplify exec migration functions Steve Sistare
2024-02-21 13:10   ` Markus Armbruster [this message]
2024-02-21 13:55   ` Fabiano Rosas
2024-02-21 15:54     ` Fabiano Rosas
2024-02-21 17:01       ` Steven Sistare

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=87r0h63quu.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=farosas@suse.de \
    --cc=marcandre.lureau@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=steven.sistare@oracle.com \
    /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.