[{"id":3676872,"web_url":"http://patchwork.ozlabs.org/comment/3676872/","msgid":"<ad0rTh493HFAxS0d@gallifrey>","list_archive_url":null,"date":"2026-04-13T17:43:42","subject":"Re: [PATCH 09/17] monitor: use class methods for monitor_accept_input","submitter":{"id":86099,"url":"http://patchwork.ozlabs.org/api/people/86099/","name":"Dr. David Alan Gilbert","email":"dave@treblig.org"},"content":"* Daniel P. Berrangé (berrange@redhat.com) wrote:\n> This removes the need for using monitor_is_qmp() to check the\n> subclass type, which is an anti-pattern.\n> \n> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>\n\nReviewed-by: Dr. David Alan Gilbert <dave@treblig.org>\n\n> ---\n>  monitor/hmp.c              | 16 ++++++++++++++++\n>  monitor/monitor-internal.h |  1 +\n>  monitor/monitor.c          | 12 +++---------\n>  3 files changed, 20 insertions(+), 9 deletions(-)\n> \n> diff --git a/monitor/hmp.c b/monitor/hmp.c\n> index 3fe6f5715a..5f9373a87b 100644\n> --- a/monitor/hmp.c\n> +++ b/monitor/hmp.c\n> @@ -52,12 +52,14 @@ static void monitor_hmp_finalize(Object *obj)\n>  \n>  int monitor_hmp_vprintf(Monitor *mon, const char *fmt, va_list ap)\n>      G_GNUC_PRINTF(2, 0);\n> +static void monitor_hmp_accept_input(Monitor *mon);\n>  \n>  static void monitor_hmp_class_init(ObjectClass *cls, const void *data)\n>  {\n>      MonitorClass *moncls = MONITOR_CLASS(cls);\n>  \n>      moncls->vprintf = monitor_hmp_vprintf;\n> +    moncls->accept_input = monitor_hmp_accept_input;\n>  }\n>  \n>  static void monitor_hmp_init(Object *obj)\n> @@ -70,6 +72,20 @@ int monitor_hmp_vprintf(Monitor *mon, const char *fmt, va_list ap)\n>      return monitor_puts(mon, buf);\n>  }\n>  \n> +static void monitor_hmp_accept_input(Monitor *mon)\n> +{\n> +    qemu_mutex_lock(&mon->mon_lock);\n> +    if (mon->reset_seen) {\n> +        MonitorHMP *hmp = MONITOR_HMP(mon);\n> +        assert(hmp->rs);\n> +        readline_restart(hmp->rs);\n> +        qemu_mutex_unlock(&mon->mon_lock);\n> +        readline_show_prompt(hmp->rs);\n> +    } else {\n> +        qemu_mutex_unlock(&mon->mon_lock);\n> +    }\n> +}\n> +\n>  static void monitor_command_cb(void *opaque, const char *cmdline,\n>                                 void *readline_opaque)\n>  {\n> diff --git a/monitor/monitor-internal.h b/monitor/monitor-internal.h\n> index 4b5e708f14..7004f5d002 100644\n> --- a/monitor/monitor-internal.h\n> +++ b/monitor/monitor-internal.h\n> @@ -99,6 +99,7 @@ struct MonitorClass {\n>      int (*vprintf)(Monitor *mon, const char *fmt, va_list ap)\n>          G_GNUC_PRINTF(2, 0);\n>      void (*emit_event)(Monitor *mon, QAPIEvent event, QDict *qdict);\n> +    void (*accept_input)(Monitor *mon);\n>  };\n>  \n>  struct Monitor {\n> diff --git a/monitor/monitor.c b/monitor/monitor.c\n> index 5f55d33476..1326069b79 100644\n> --- a/monitor/monitor.c\n> +++ b/monitor/monitor.c\n> @@ -557,16 +557,10 @@ int monitor_suspend(Monitor *mon)\n>  static void monitor_accept_input(void *opaque)\n>  {\n>      Monitor *mon = opaque;\n> +    MonitorClass *cls = MONITOR_GET_CLASS(mon);\n>  \n> -    qemu_mutex_lock(&mon->mon_lock);\n> -    if (!monitor_is_qmp(mon) && mon->reset_seen) {\n> -        MonitorHMP *hmp_mon = container_of(mon, MonitorHMP, parent);\n> -        assert(hmp_mon->rs);\n> -        readline_restart(hmp_mon->rs);\n> -        qemu_mutex_unlock(&mon->mon_lock);\n> -        readline_show_prompt(hmp_mon->rs);\n> -    } else {\n> -        qemu_mutex_unlock(&mon->mon_lock);\n> +    if (cls->accept_input) {\n> +        cls->accept_input(mon);\n>      }\n>  \n>      qemu_chr_fe_accept_input(&mon->chr);\n> -- \n> 2.53.0\n>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=treblig.org header.i=@treblig.org header.a=rsa-sha256\n header.s=bytemarkmx header.b=XGDS0NnK;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fvZXy3jl8z1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 03:44:32 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wCLK9-0006qE-Iu; Mon, 13 Apr 2026 13:43:49 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <dg@treblig.org>)\n id 1wCLK7-0006pw-4b; Mon, 13 Apr 2026 13:43:47 -0400","from mx.treblig.org ([2a00:1098:5b::1])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <dg@treblig.org>)\n id 1wCLK5-0005aM-3H; Mon, 13 Apr 2026 13:43:46 -0400","from dg by mx.treblig.org with local (Exim 4.98.2)\n (envelope-from <dg@treblig.org>) id 1wCLK2-000000083LT-2E96;\n Mon, 13 Apr 2026 17:43:42 +0000"],"DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=treblig.org\n ; s=bytemarkmx;\n h=Content-Type:MIME-Version:Message-ID:Subject:From:Date:From\n :Subject; bh=hJHQ+zco3nKsygBWmQoH8CPh3xvf+sntcrZZ9yMW7Ms=; b=XGDS0NnKTiCo9rOE\n CnZypXQ14ZLwocQdjn0TmAqnltFqXP5eaw35dt2uudqbWlW+/bWmjzlXHSSldzE6TqYKA7DrM3+do\n 9kcYR5poTmi78nh39i2337cI2yRkPOg7FVZvQwjQPQBxv6N8ZQRwkM8SmkLks9tjHu3hDjqsfsRv0\n zpkzK4LsGWA2/c0BvwSowhwcg0lew6hC/2vWXL1Y4y5zB7ADNsgmISay+riO2qZmRiWNtZpP/BgYn\n w/ILUkdtciK5kP9TCo1JEcFgAPxoetW5qmtbszuv706QRLTl5K+McqhXnF/PeiWcbFwUBiqueLeXV\n Z2pzb+b3aAjVnpCKIQ==;","Date":"Mon, 13 Apr 2026 17:43:42 +0000","From":"\"Dr. David Alan Gilbert\" <dave@treblig.org>","To":"Daniel =?iso-8859-1?q?P=2E_Berrang=E9?= <berrange@redhat.com>","Cc":"qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,\n Markus Armbruster <armbru@redhat.com>,\n Christian Brauner <brauner@kernel.org>,\n Alex =?iso-8859-1?q?Benn=E9e?= <alex.bennee@linaro.org>, Philippe\n\t=?iso-8859-1?q?Mathieu-Daud=E9?= <philmd@linaro.org>,\n Fabiano Rosas <farosas@suse.de>,\n =?iso-8859-1?q?Marc-Andr=E9?= Lureau <marcandre.lureau@redhat.com>,\n Peter Xu <peterx@redhat.com>, Kevin Wolf <kwolf@redhat.com>,\n qemu-block@nongnu.org, Eric Blake <eblake@redhat.com>","Subject":"Re: [PATCH 09/17] monitor: use class methods for monitor_accept_input","Message-ID":"<ad0rTh493HFAxS0d@gallifrey>","References":"<20260410160458.3778874-1-berrange@redhat.com>\n <20260410160458.3778874-10-berrange@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20260410160458.3778874-10-berrange@redhat.com>","X-Chocolate":"70 percent or better cocoa solids preferably","X-Operating-System":"Linux/6.12.74+deb13+1-amd64 (x86_64)","X-Uptime":"17:43:38 up 31 days, 18:57,  2 users,  load average: 0.00, 0.01,\n 0.00","User-Agent":"Mutt/2.2.13 (2024-03-09)","Received-SPF":"pass client-ip=2a00:1098:5b::1; envelope-from=dg@treblig.org;\n helo=mx.treblig.org","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]