From patchwork Tue Sep 1 09:15:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 275014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59FF0C433E6 for ; Tue, 1 Sep 2020 09:21:00 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F3E6C206A5 for ; Tue, 1 Sep 2020 09:20:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="GcgBZoPH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F3E6C206A5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:60608 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2TK-0003EE-TJ for qemu-devel@archiver.kernel.org; Tue, 01 Sep 2020 05:20:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Np-00023W-PU; Tue, 01 Sep 2020 05:15:17 -0400 Received: from mout.web.de ([212.227.17.12]:51301) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nm-00079z-RO; Tue, 01 Sep 2020 05:15:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951709; bh=FGVcXS49B3ghj8/SIYCEvRl6W4CeHpT1H1JlfjhaCys=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=GcgBZoPH8O/FGqxdogSiRXICLIdGhlV1/udfhazUwiHjO7AawyqMl/6rukZNUReQo gTo59UyEo9SoCqPtK5jRK08Q0FshO/hFgx0tIIToIes3H++DtunREnfx2MBfh05xgy tjhkhLZ2oVUh886SnkeHl4JNNqhN51cAfm0UH+ew= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MBjMM-1kIaIL0ptE-00CPAE; Tue, 01 Sep 2020 11:15:09 +0200 Date: Tue, 1 Sep 2020 11:15:07 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 1/8] Introduce yank feature Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:xOwm8OxUfjmWV2ElLILfkcf/Vrj61Vlbx4rsBr3aQjWadl4OReg vTX6689dN/05SjsWP0NdkcGk4BMxkSF+N8AvIdF/AzpePy9YKPLRu8LmTsE1/J9gPCgMqEE OvlBSpVbePAllRfsF0vt1PpOnBAMd0M+4qTdL5kFNRXYFQrZ2kgGSzQKWZ+0vEPrJRs8o33 vLX+SWeQKS+LPhngnjrpg== X-UI-Out-Filterresults: notjunk:1; V03:K0:t7OeT9xk4Ww=:S7BINj6kvjPamrtcuctuS8 iFN9dG0NQX3HYpd8riBCtXT/K5oVFvmSmItfdKBVs9QSMmXD5SDtlBRcdECgRuJd9nqMzNurl GGTOCrIxV8yKBQLjEGk0hbQKX6ype/Fl7iwRvuQi24tSKMca0Bt7rLeLHF4tRL88zUMSy/DTa h5VWv/WfHUM87GEvNwi7DqnKB2QxiDokWL8lCAxgfw4iBmf+rqbhH0qo+LUleSW1/eNwYjEmT iRfpaw2CH12yGb7+jd0yd+LSL+3AGFhm4WRzriJnmQqVwrabTEy2NSp6mZM0ScyUw5QGILWrh dOUtzZln3tsLEjdlYSzERwmTK0iE0TTb8uRQPiLpoaYX1mjMgoDgepn4QZte2zUoLS8Byq8J9 gNrIH5jAcUpB8XXv3BPpDxrvFeNukXzMORIvla5bUNUlaUwX7knwT63dm8aHx8k5gLWF1tz9n UUltiyEtXXyQHWitJmLDHI3Pw8swGTTVsY4DMXi4OgBkVOzpLYlfWkzPxCNcu7bWoFte87x38 rmAU1XiPorK/uB0AlwnkGM+ra/BwpGBBbnurm5EHFqvxHidddzZPbGjRcwT14CSBNnnhPlRqE j1ZeooH4VVJiuMw0kH9pqRwmjsfbwu0YWjOpoesapTJZbbv9FoBCtmkF/GsYveAxIKE/rTKCf nd3Io/m4Mr8pW/5tos6GCrrR96ZHlLGfFDGn/cjQetPU0cLDmgw1ZJe0fNuSntWacpB1PgT8M kjZFCeL9m2kOh1kUkniT4JBSgVi3/LGaZYdZetLHma6Sm031WhvjEz/aEXhukvBsfDPk4EnfM uL4D+C4vIx8VSCcmgvj+4QfLUClJQRmAS9KlihCYRRCt0UaiDvXACvMK/bs3/nCZodqGLva7p UrjQPe+dRUaKrIZen9GpUXldm8cvxin1Ph0OCPNO7C+w/F/eF6YrShAyYG9yLu2HGJAUd56zD OIadn4bnsYFBaMfZuNPOqwmzNLHqO9mudMwwpgBZV33+oGr/LwYKWoNuqWSDLs9tgQdZl+BUG x35Yn0p4ZoTR3xYXGFys4Y7ejdbtGKz3Mp2KPsiW2wD05j2NGx15Z7kVaW1VPAlUoKHgcAU2l A2c6l/Ng9gmhPpb2EykKtj01iSuwSxhzRpB4JzIu7/NVqTaGd0ww3kx+Ld7U+cg6Qb8hr9C1h ClqVan9Xcno206CMeSfndJWeDNXM18xgbXtQzZeeD4JARZWHoidNiWegeRgqZvy+PbLZv2ptq gnrqpxX1DkBbhwvQVMGsdpeXXrHBcE/MpyCbhsQ== Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:13 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" The yank feature allows to recover from hanging qemu by "yanking" at various parts. Other qemu systems can register themselves and multiple yank functions. Then all yank functions for selected instances can be called by the 'yank' out-of-band qmp command. Available instances can be queried by a 'query-yank' oob command. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrangé --- include/qemu/yank.h | 81 +++++++++++++++++++ qapi/misc.json | 62 +++++++++++++++ util/meson.build | 1 + util/yank.c | 187 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 331 insertions(+) create mode 100644 include/qemu/yank.h create mode 100644 util/yank.c -- 2.20.1 diff --git a/include/qemu/yank.h b/include/qemu/yank.h new file mode 100644 index 0000000000..c5ab53965a --- /dev/null +++ b/include/qemu/yank.h @@ -0,0 +1,81 @@ +/* + * QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#ifndef YANK_H +#define YANK_H + +typedef void (YankFn)(void *opaque); + +/** + * yank_register_instance: Register a new instance. + * + * This registers a new instance for yanking. Must be called before any yank + * function is registered for this instance. + * + * This function is thread-safe. + * + * @instance_name: The globally unique name of the instance. + * @errp: Error object. + */ +void yank_register_instance(const char *instance_name, Error **errp); + +/** + * yank_unregister_instance: Unregister a instance. + * + * This unregisters a instance. Must be called only after every yank function + * of the instance has been unregistered. + * + * This function is thread-safe. + * + * @instance_name: The name of the instance. + */ +void yank_unregister_instance(const char *instance_name); + +/** + * yank_register_function: Register a yank function + * + * This registers a yank function. All limitations of qmp oob commands apply + * to the yank function as well. See docs/devel/qapi-code-gen.txt under + * "An OOB-capable command handler must satisfy the following conditions". + * + * This function is thread-safe. + * + * @instance_name: The name of the instance + * @func: The yank function + * @opaque: Will be passed to the yank function + */ +void yank_register_function(const char *instance_name, + YankFn *func, + void *opaque); + +/** + * yank_unregister_function: Unregister a yank function + * + * This unregisters a yank function. + * + * This function is thread-safe. + * + * @instance_name: The name of the instance + * @func: func that was passed to yank_register_function + * @opaque: opaque that was passed to yank_register_function + */ +void yank_unregister_function(const char *instance_name, + YankFn *func, + void *opaque); + +/** + * yank_generic_iochannel: Generic yank function for iochannel + * + * This is a generic yank function which will call qio_channel_shutdown on the + * provided QIOChannel. + * + * @opaque: QIOChannel to shutdown + */ +void yank_generic_iochannel(void *opaque); +#endif diff --git a/qapi/misc.json b/qapi/misc.json index 9d32820dc1..7de330416a 100644 --- a/qapi/misc.json +++ b/qapi/misc.json @@ -1615,3 +1615,65 @@ ## { 'command': 'query-vm-generation-id', 'returns': 'GuidInfo' } +## +# @YankInstances: +# +# @instances: List of yank instances. +# +# A yank instance can be yanked with the "yank" qmp command to recover from a +# hanging qemu. +# +# Yank instances are named after the following schema: +# "blockdev:" refers to a block device. Currently only nbd block +# devices are implemented. +# "chardev:" refers to a chardev. Currently only socket chardevs +# are implemented. +# "migration" refers to the migration currently in progress. +# +# Currently implemented yank instances: +# -nbd block device: +# Yanking it will shutdown the connection to the nbd server without +# attempting to reconnect. +# -socket chardev: +# Yanking it will shutdown the connected socket. +# -migration: +# Yanking it will shutdown all migration connections. +# +# Since: 5.2 +## +{ 'struct': 'YankInstances', 'data': {'instances': ['str'] } } + +## +# @yank: +# +# Recover from hanging qemu by yanking the specified instances. See +# "YankInstances" for more information. +# +# Takes @YankInstances as argument. +# +# Returns: nothing. +# +# Example: +# +# -> { "execute": "yank", "arguments": { "instances": ["blockdev:nbd0"] } } +# <- { "return": {} } +# +# Since: 5.2 +## +{ 'command': 'yank', 'data': 'YankInstances', 'allow-oob': true } + +## +# @query-yank: +# +# Query yank instances. See "YankInstances" for more information. +# +# Returns: @YankInstances +# +# Example: +# +# -> { "execute": "query-yank" } +# <- { "return": { "instances": ["blockdev:nbd0"] } } +# +# Since: 5.2 +## +{ 'command': 'query-yank', 'returns': 'YankInstances', 'allow-oob': true } diff --git a/util/meson.build b/util/meson.build index e6b207a99e..f3989a1869 100644 --- a/util/meson.build +++ b/util/meson.build @@ -50,6 +50,7 @@ endif if have_system util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio]) + util_ss.add(files('yank.c')) endif if have_block diff --git a/util/yank.c b/util/yank.c new file mode 100644 index 0000000000..f63bfdca50 --- /dev/null +++ b/util/yank.c @@ -0,0 +1,187 @@ +/* + * QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "qemu/thread.h" +#include "qemu/queue.h" +#include "qapi/qapi-commands-misc.h" +#include "io/channel.h" +#include "qemu/yank.h" + +struct YankFuncAndParam { + YankFn *func; + void *opaque; + QLIST_ENTRY(YankFuncAndParam) next; +}; + +struct YankInstance { + char *name; + QLIST_HEAD(, YankFuncAndParam) yankfns; + QLIST_ENTRY(YankInstance) next; +}; + +/* + * This lock protects the yank_instance_list below. + */ +static QemuMutex yank_lock; + +static QLIST_HEAD(, YankInstance) yank_instance_list + = QLIST_HEAD_INITIALIZER(yank_instance_list); + +static struct YankInstance *yank_find_instance(const char *name) +{ + struct YankInstance *instance; + + QLIST_FOREACH(instance, &yank_instance_list, next) { + if (!strcmp(instance->name, name)) { + return instance; + } + } + return NULL; +} + +void yank_register_instance(const char *instance_name, Error **errp) +{ + struct YankInstance *instance; + + qemu_mutex_lock(&yank_lock); + + if (yank_find_instance(instance_name)) { + error_setg(errp, "duplicate yank instance name: '%s'", + instance_name); + qemu_mutex_unlock(&yank_lock); + return; + } + + instance = g_slice_new(struct YankInstance); + instance->name = g_strdup(instance_name); + QLIST_INIT(&instance->yankfns); + QLIST_INSERT_HEAD(&yank_instance_list, instance, next); + + qemu_mutex_unlock(&yank_lock); +} + +void yank_unregister_instance(const char *instance_name) +{ + struct YankInstance *instance; + + qemu_mutex_lock(&yank_lock); + instance = yank_find_instance(instance_name); + assert(instance); + + assert(QLIST_EMPTY(&instance->yankfns)); + QLIST_REMOVE(instance, next); + g_free(instance->name); + g_slice_free(struct YankInstance, instance); + + qemu_mutex_unlock(&yank_lock); +} + +void yank_register_function(const char *instance_name, + YankFn *func, + void *opaque) +{ + struct YankInstance *instance; + struct YankFuncAndParam *entry; + + qemu_mutex_lock(&yank_lock); + instance = yank_find_instance(instance_name); + assert(instance); + + entry = g_slice_new(struct YankFuncAndParam); + entry->func = func; + entry->opaque = opaque; + + QLIST_INSERT_HEAD(&instance->yankfns, entry, next); + qemu_mutex_unlock(&yank_lock); +} + +void yank_unregister_function(const char *instance_name, + YankFn *func, + void *opaque) +{ + struct YankInstance *instance; + struct YankFuncAndParam *entry; + + qemu_mutex_lock(&yank_lock); + instance = yank_find_instance(instance_name); + assert(instance); + + QLIST_FOREACH(entry, &instance->yankfns, next) { + if (entry->func == func && entry->opaque == opaque) { + QLIST_REMOVE(entry, next); + g_slice_free(struct YankFuncAndParam, entry); + qemu_mutex_unlock(&yank_lock); + return; + } + } + + abort(); +} + +void yank_generic_iochannel(void *opaque) +{ + QIOChannel *ioc = QIO_CHANNEL(opaque); + + qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); +} + +void qmp_yank(strList *instances, + Error **errp) +{ + strList *tail; + struct YankInstance *instance; + struct YankFuncAndParam *entry; + + qemu_mutex_lock(&yank_lock); + for (tail = instances; tail; tail = tail->next) { + instance = yank_find_instance(tail->value); + if (!instance) { + error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, + "Instance '%s' not found", tail->value); + qemu_mutex_unlock(&yank_lock); + return; + } + } + for (tail = instances; tail; tail = tail->next) { + instance = yank_find_instance(tail->value); + assert(instance); + QLIST_FOREACH(entry, &instance->yankfns, next) { + entry->func(entry->opaque); + } + } + qemu_mutex_unlock(&yank_lock); +} + +YankInstances *qmp_query_yank(Error **errp) +{ + struct YankInstance *instance; + YankInstances *ret; + + ret = g_new0(YankInstances, 1); + ret->instances = NULL; + + qemu_mutex_lock(&yank_lock); + QLIST_FOREACH(instance, &yank_instance_list, next) { + strList *entry; + entry = g_new0(strList, 1); + entry->value = g_strdup(instance->name); + entry->next = ret->instances; + ret->instances = entry; + } + qemu_mutex_unlock(&yank_lock); + + return ret; +} + +static void __attribute__((__constructor__)) yank_init(void) +{ + qemu_mutex_init(&yank_lock); +} From patchwork Tue Sep 1 09:15:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 275011 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8ED9BC433E6 for ; Tue, 1 Sep 2020 09:26:51 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 58964206A5 for ; Tue, 1 Sep 2020 09:26:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="cFky8VPm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 58964206A5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51976 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2Z0-0002s8-D7 for qemu-devel@archiver.kernel.org; Tue, 01 Sep 2020 05:26:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34684) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nv-0002KD-VG; Tue, 01 Sep 2020 05:15:23 -0400 Received: from mout.web.de ([212.227.17.11]:34845) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nt-0007GL-QA; Tue, 01 Sep 2020 05:15:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951716; bh=75ECl9bX1EGfY3DMAQC4Qu0/MXJlbsQoukpW/VUFgz0=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=cFky8VPmbrQ8rP24faNszi5Cl8Cm+wVI4qeFo2+oGYAl44kPRV4s1dFz/6h7DP1E0 7V6yFABMXzs/guyScrmccArwAqWnTKDJR3EAv6/zPauSqenSI7RzsYQklMeNJ7ZNEy of30ThqB5lg6BcS0tMZimXuc/QanyVXPbSF5d6pc= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LdEsP-1kvTs50xiD-00iVuK; Tue, 01 Sep 2020 11:15:16 +0200 Date: Tue, 1 Sep 2020 11:15:14 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 3/8] chardev/char-socket.c: Add yank feature Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:SWIqchQkfqMgjfjcTWWMUeWHuAzyddrcMgMwuAikZRMKfM8goQl TiZEgK+99+WZPdd3SyxB2oOnPx8SWmTnHYlCcOBJVqshjeYe1ixUKvAOQc+xT/a1/TFZd1P n9ZoCO3YZLYBELXoycswjVNdX3ofMd1dHAYrN7NWspY8fGnrjCI9IEMqFkMK7vizhx7GdAQ zM8UY5XjREK7qDqf/wCAQ== X-UI-Out-Filterresults: notjunk:1; V03:K0:QqNDNFckpWY=:2LApKKugsQJyw5mCnBAjuz 0yVlQS5KiJmdNtRShoWBgy4vyxGwX2vVrLT4IWrINVonl1uHpvWfN6NxQEffxaB0hOkEaDgrd yNGRvKsaZrnwmAH2zMwOq4vCnVl/eP7W8gUDQFR2I5OTuT6HNErAh8szrwWyaVy/eGBHjNt/x yi3BCmy2MfUO05yOon9xMtTqpEepsc/iodJRkaHKx1dD3fGc0pnp1P5ehSS0RgMpOdCn1Rdle DFl0KNq15fPd/gTz1qIQgfDqvLJpvLVPoYjrp4YAMLBUC59xjEd5A++i4Mm21q5m4KxCobjQl qTYaU8TAHMwbkIOglRNk+Xahos8FCHwZ2eCFmaFifPyqj/ey2+QtKdqWDYNGmP3DqoNSWFIh0 9A6B9a9G0/sEYrArGE8gw/qnkUCjFlV0x7/U1hxNJYrp+C7Qm/BsIO1t1rCs2n1f0N8W5i+8Y ZpBOIN+K7hBU+V9utdn7NFiLcoZKXXh6fdsro0m6KqeyQK+0vUv1w1pulLnOxum7jQiD1NRJc AIE5c1PGklAFUA0bw87zLP0AVpjndgb4AxTyD59c7BBxccTUyu05vDD1V5xFSo0UweaFulGUk zDDll/gzerTHhokuqRvqstrxA/WFKm0rRL/T/jpWlo0vvCKsX831MQ5F6I9tNKgsA0Myri1c0 tBS2SHtACIqrugf9UmxH0e1c1RvYu4aNsWHr1fynDGZVtLWKtaM0t6MWmbLVo8fpocye9o+sm 2qO2mr94uOV/osVNd/YgGWZTjmFW7lUIyeIsq2kmh4q6J3psL1GEM7GzOYqwY2KVPyTJBzNWC IA88/rUBLr4sjboK4sHcFrPdVuBP+ZJDk9rNNoD9I4nQs1sgu9dwKf8yPmv3zeh/wuGI72K5q 7KCPY0MieiDDWjB9FR7nnKmvxEPNwrUpgMJgZbMGpHEakmtArxuWlNoK/6f4dAWfYVldJqDfR jLeK8WIIVee1wMCIZ9J0n6613eDtDCkfykSj0NltwLZ0jKoUzXloqVB823UJ9KHjP+/sBP4SI wZUbG3TSl8SbM+LKj0fzQ2vEAlvbLmIbalwd/5E8Rt3CNRpKil0NQNBLCiLtc4Ait+fqt503S PxK/0NbMPvGEl04VWve1VuA0KEJruIebvLk39ZwFsNDFPb9KoqZfs9UifpP/ooaDDLbsiLbsr sA9GayjMVaV5r+QMbGWbXYXl3ACuuY8YnbhwyzHrlnGrpY+iPeEgSL/S4H5YdMhQywJAxGdz/ osxJJIeXciYIgBqVXvllrX1/HR85GWC5rB/SGiA== Received-SPF: pass client-ip=212.227.17.11; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:16 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Register a yank function to shutdown the socket on yank. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrangé --- chardev/char-socket.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) -- 2.20.1 diff --git a/chardev/char-socket.c b/chardev/char-socket.c index ef62dbf3d7..8e2865ca83 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -34,6 +34,7 @@ #include "qapi/error.h" #include "qapi/clone-visitor.h" #include "qapi/qapi-visit-sockets.h" +#include "qemu/yank.h" #include "chardev/char-io.h" @@ -69,6 +70,7 @@ typedef struct { size_t read_msgfds_num; int *write_msgfds; size_t write_msgfds_num; + char *yank_name; SocketAddress *addr; bool is_listen; @@ -413,6 +415,11 @@ static void tcp_chr_free_connection(Chardev *chr) tcp_set_msgfds(chr, NULL, 0); remove_fd_in_watch(chr); + if (s->state == TCP_CHARDEV_STATE_CONNECTING + || s->state == TCP_CHARDEV_STATE_CONNECTED) { + yank_unregister_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(s->sioc)); + } object_unref(OBJECT(s->sioc)); s->sioc = NULL; object_unref(OBJECT(s->ioc)); @@ -916,6 +923,8 @@ static int tcp_chr_add_client(Chardev *chr, int fd) } tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); ret = tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); return ret; @@ -930,6 +939,8 @@ static void tcp_chr_accept(QIONetListener *listener, tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); tcp_chr_set_client_ioc_name(chr, cioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(cioc)); tcp_chr_new_client(chr, cioc); } @@ -945,6 +956,8 @@ static int tcp_chr_connect_client_sync(Chardev *chr, Error **errp) object_unref(OBJECT(sioc)); return -1; } + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); return 0; @@ -960,6 +973,8 @@ static void tcp_chr_accept_server_sync(Chardev *chr) tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); sioc = qio_net_listener_wait_client(s->listener); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); } @@ -1070,6 +1085,10 @@ static void char_socket_finalize(Object *obj) object_unref(OBJECT(s->tls_creds)); } g_free(s->tls_authz); + if (s->yank_name) { + yank_unregister_instance(s->yank_name); + g_free(s->yank_name); + } qemu_chr_be_event(chr, CHR_EVENT_CLOSED); } @@ -1085,6 +1104,8 @@ static void qemu_chr_socket_connected(QIOTask *task, void *opaque) if (qio_task_propagate_error(task, &err)) { tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED); + yank_unregister_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); check_report_connect_error(chr, err); goto cleanup; } @@ -1118,6 +1139,8 @@ static void tcp_chr_connect_client_async(Chardev *chr) tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); sioc = qio_channel_socket_new(); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); /* * Normally code would use the qio_channel_socket_connect_async * method which uses a QIOTask + qio_task_set_error internally @@ -1360,6 +1383,14 @@ static void qmp_chardev_open_socket(Chardev *chr, qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS); } + s->yank_name = g_strconcat("chardev:", chr->label, NULL); + yank_register_instance(s->yank_name, errp); + if (*errp) { + g_free(s->yank_name); + s->yank_name = NULL; + return; + } + /* be isn't opened until we get a connection */ *be_opened = false; From patchwork Tue Sep 1 09:15:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 275008 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B293DC433E2 for ; Tue, 1 Sep 2020 09:38:59 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 445002087D for ; Tue, 1 Sep 2020 09:38:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="ckC2NE+V" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 445002087D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:52202 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2kj-0006Qx-W4 for qemu-devel@archiver.kernel.org; Tue, 01 Sep 2020 05:38:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34790) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O8-0002o8-3K; Tue, 01 Sep 2020 05:15:36 -0400 Received: from mout.web.de ([217.72.192.78]:40851) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O5-0007Jn-9d; Tue, 01 Sep 2020 05:15:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951724; bh=wGa1Vmn2SbeAvZdU/7dQ4fM84V6LwRiSr+jRdIG+9yw=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=ckC2NE+VGKGvOfpPjP/Y0GYk0QTb+Zs+k383lJXS/wd03NSwHCDDRIgacDLOiwM15 FiFaGv9ey2VmaIhgJqR+3sOr5xTE1y8yKdnoEnugj+t+NwgGvEAUT+txQsK/a5uhsW IsRNSuwJ84Kw+Z8rPrLauu9KaLvo/NmGTo4+MJig= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1McZjb-1kjMOc39pd-00chaH; Tue, 01 Sep 2020 11:15:23 +0200 Date: Tue, 1 Sep 2020 11:15:22 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 5/8] io/channel-tls.c: make qio_channel_tls_shutdown thread-safe Message-ID: <460bb32096f77e892cc3555c1a70613a58855a4b.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:CqWcWJ73tYPM4kOGRhTkaJS48bHYUTS2RvNuygb78Qg5S94hrzM cMzmZdboMQsbEufdk2Drv9G5d+KwjtnmVpcmMCN6R/hpAly5ZyG0YIruobAc/oNLYUuGx98 h8VXMrtoZQiDzmOwdnT+WPYpJ3GlPYe9E8JjqRQ5P7soxD/1kE5UoikfKs2HScOs9P6FuwT yTPpiLwkF5ikF/YWvC6qA== X-UI-Out-Filterresults: notjunk:1; V03:K0:IGJjJT6m8Sc=:1n7PXbZfgBjd+vHridWlbj 8SzBZsowJlSoakDmBhws20ViD31Vt6uQvurn2eHtSijMzsrq88vX8U0WAJgIGb4x0Vb97nMZG YtPb+f+6ZLdgBEMepxbBmNTYcI9J6Z86Fzor2GezAoit3L9gE3j5SM8UfTgAsU6bN2QyDkxFm QLSOaOfviLEWTMbSNTTIhh7bi5b2Q4ym5wItBCquf463iHj9VO14c3VFYfSHm3oQ0oysr+bSB 28E2sp1wkRTnmDYGAhZJHXOp4/aY0JdSAVWReqdSAtZhl6E/ZScex9fmoNEh8oIjD6LcefMTg MGWuU3QclUwJYEoSF2giHBnQOZ6Zzfjjk6vLs+05DG3Swf6DjZQXcdPuQpLSXBUxAeBqo6uxN M4UDwNDrA1GKemzw/0fCfM8Wl4LSatHJegincHWV37DDFATnGFD4gYSOTU9wyJULcWYrfILFh Pjt2BO1NyH3RTvRKKSg+X9eH9lyjgOqDEAizxs5Ghas90p+lbA9FwhcJ9IKtPKO3o8zYgJ0O6 Ewklu1Kn6LhAcG5s+9vn18t/C+CPZPLnAy4x4vzKfYZmnsTu63nL7qylpmphB03U8xxvYRjNx q53eG8+4sE58b7GsrcCqwyI7+26O9jQ83SyCChH+OGj/86R0wgZsnI9Y/KAErQw3L6NCtw+r1 mbn9hXRmJ/4BoSRMhXhoB9Lw8ilGXCTCeUW7jQN/9V8Et0LeXkMKMvwKJlJRa0/psPeE44HJh /0MqfqwOkdhOo41E7t4IWSM7DpSs298AFnwQHAcgOVSOiP/l3QBD8DnsNRCpUYYb3/DdC7AVq J4B/IX6jQdmZiKNiy5PXOKw7og/ZNAMSyfdiXcd4x3fRHXUMPiHm3aT1Xh/nWACDtu+CZLO+w oteXBtYBsyp4OTtcnCy1vAQMHd7zNfLv+xnh34gyRv4Sv4nDO+In5mNnFCrQGtG9CNEw4flTw X3kSr9aixwPOasLYrBl/javOeOuW73mzUSx7QUizuzwTVERpDSKh2nMfYWkS6Vnfah+10pnKT SPcnK+TH5RZcesB/43FTyvsih/z1xHf5LZ4nK7CqUPWXaOsmuA+co/KE7sbfjVhkk1gmCU5MR kH2jNKQ2yziGtgZN9k9gwaU/gCGQcZOj8ES4LQF6ExlKtpxagLKQZKETuenFBQ67XFL5iFkoS BP37YYszFfx0V+JzjjcVMPIHmRDxNQoYX0ATKznIPu7ivTm7Gj4eou3ywbCsG1O0HHACtFCiy dp4PcYq5zT4U6qBsiL40hF+/FHjC6vH+UbUD4Eg== Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Make qio_channel_tls_shutdown thread-safe by using atomics when accessing tioc->shutdown. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrangé --- io/channel-tls.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) -- 2.20.1 diff --git a/io/channel-tls.c b/io/channel-tls.c index 7ec8ceff2f..b350c84640 100644 --- a/io/channel-tls.c +++ b/io/channel-tls.c @@ -23,6 +23,7 @@ #include "qemu/module.h" #include "io/channel-tls.h" #include "trace.h" +#include "qemu/atomic.h" static ssize_t qio_channel_tls_write_handler(const char *buf, @@ -277,7 +278,8 @@ static ssize_t qio_channel_tls_readv(QIOChannel *ioc, return QIO_CHANNEL_ERR_BLOCK; } } else if (errno == ECONNABORTED && - (tioc->shutdown & QIO_CHANNEL_SHUTDOWN_READ)) { + (atomic_load_acquire(&tioc->shutdown) & + QIO_CHANNEL_SHUTDOWN_READ)) { return 0; } @@ -361,7 +363,7 @@ static int qio_channel_tls_shutdown(QIOChannel *ioc, { QIOChannelTLS *tioc = QIO_CHANNEL_TLS(ioc); - tioc->shutdown |= how; + atomic_or(&tioc->shutdown, how); return qio_channel_shutdown(tioc->master, how, errp); } From patchwork Tue Sep 1 09:15:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 275009 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C6C56C433E2 for ; Tue, 1 Sep 2020 09:32:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8F382205CB for ; Tue, 1 Sep 2020 09:32:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="DtMH31QB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8F382205CB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:37786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2em-0000Ft-Ig for qemu-devel@archiver.kernel.org; Tue, 01 Sep 2020 05:32:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34776) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O6-0002lK-QT; Tue, 01 Sep 2020 05:15:34 -0400 Received: from mout.web.de ([212.227.17.12]:34913) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O4-0007JS-Pm; Tue, 01 Sep 2020 05:15:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951727; bh=xAfFk+1GpNfhWU5jVhEM5S9s3tlNI5aCZKFADiMs8rs=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=DtMH31QBhti5RV02/tizZ5kdNJcATWnln1yV4AeFS8UrPAOjw6PNjDLq4gdHOEMqF riYdFzTaCKAFUh2t0PR4QLjDNfQyzqu77zLcQ025CR+CtInARr7VEbeAFu8LCh6EVr gmQEheqiVwhCAiKNWQQ/9M7A4TMgo7BGmrYNX6wE= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0Lc8c5-1kuNwY2Icv-00jZtU; Tue, 01 Sep 2020 11:15:27 +0200 Date: Tue, 1 Sep 2020 11:15:25 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 6/8] io: Document qmp oob suitability of qio_channel_shutdown and io_shutdown Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:GZthgDTWeDdi57QP0iqQtvXjml5F/NRUmThVXeJAHBKiPYRactx YaFuhmbhxIiqebyCYID4RiM/PrGx0KTFfKzExVaQOokjTHC8MUl8Xva/b7TpL+sYLQwy7f8 Mdyt8GpFGj3atNXa5G8GePWEXCUiTTY9vrKp4NxomDD1XiIY67fCGM67IRvXTqqigrOVenm TNRtk3aielVoXau5rewXg== X-UI-Out-Filterresults: notjunk:1; V03:K0:QqAxWhWLByg=:pKA1esqGSXSDGiB3m3n2gN VL2aCzP49Kj+C1wkk30wIXCsaX2YXAaMOg+t3AreOhTrM2fcy6WXrNHLBANQIXvKetNidFtW/ x7mV6HEnvXkzvlTUiapmmkwNncNQwdaNff49WuK/tJq8PfxC1r+I/9arJfWfGpXX6Yw5UQXHP aa7CHp9yA4ynMb5crWpnv38YZQ63YsMMaShm8jB7SvpLGJsQWixoryUAd8BoF18W635TTxapH ibrZjC9frE1Q2dS0XKNV0Ub9gcNIXIk/HxAVOUM54UBwamOVl9UdMwPkczjUoN2rlo99+el8S Fd6gBzSteOPVzAvr6N34qHsE+xNPTLmR8fn7IH+Ko9lP6hr6fBt/wtBYR7zLbDFwIRYQkY2Vu pCndaEIgIP2EnYc8uoveLVW64Q8gCWeTOFb0HAFtKQ2tkA5P1qn5gPCY30yNOIKYLUxzRgIKW 0ZoOCAte4u3wfwYIme54DU7AN6TQUUMl2y0MjxcnG0HQyoH81IrkLwj4jvU6BS91AStrOqW6J /FCbf44HKhPvYfrHRrZTj0YcYm+5kbrQRjbHIf03b6UedrbrwSQC6LgCWScp5FLVs+YtlXSOf 4rXoI6Px1z7KSq1z5MlPYqSd1TA/VZqGrwfzc4e+xC4LjB5XlIToxt2udfE+KAtSxMjQR6mco S8OpsKgok3407nM3xK9fmlmOT/oYk6IeAOzziJKsnE2NoVeXxJObjJgPh5+IKE+m+IUpSPdfJ UFNUYPfw9CTjz20AaTkEPMopy2G4AJYL9i+d9rzsx+lrDc781DZ9UhVyY0VBxTyQQpuYMAMiF 231LWVm/wxQJCvSUchTjRjrBQnshBU49ez76+MwCn7NsMTteq8UxwKN+ESzw9h1dnPV53+maZ StQdFaCmWUBOYqKcNfiX/nB+mZe5tQ9YbgQ9Yw3HXKEk5JcWyFLR9W5UmjHqVJ7khD6X4I0Z0 05v52TmA1LMjxU0s/jT2x2lv684d3GTU1ibujDm2Yw1ToOWsvdJJo3NMKxtQH2fiaApa5lkrS 6MGM8fu2eBUPMuaiJKbrbz6IOFuePTe673uvsNK7TI/wKHb/CMHbS4Ti1XzNNL7St+uRHunfv os+Ty2iXp2cHiKo6/X1kDTbrWJyp8mLTK0YXFB2+wivNhbfqTc7/A2e4H8qt7O6aatzm0ZnJv /YWFVyMv/lluGaxg+WFh9hIOhueWXHpXByzviKTr9kAzg5WeZulDOn17AG25xW4lVvaCAh7QZ 54Pyc4qdMvdwxZ4p2qrK/p4wIQ40hk9rqJR5sjA== Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:13 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Migration and yank code assume that qio_channel_shutdown is thread -safe and can be called from qmp oob handler. Document this after checking the code. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi --- include/io/channel.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) -- 2.20.1 diff --git a/include/io/channel.h b/include/io/channel.h index d4557f0930..46156d84f5 100644 --- a/include/io/channel.h +++ b/include/io/channel.h @@ -98,7 +98,8 @@ struct QIOChannel { * provide additional optional features. * * Consult the corresponding public API docs for a description - * of the semantics of each callback + * of the semantics of each callback. io_shutdown in particular + * must be thread-safe, terminate quickly and must not block. */ struct QIOChannelClass { ObjectClass parent; @@ -516,6 +517,8 @@ int qio_channel_close(QIOChannel *ioc, * QIO_CHANNEL_FEATURE_SHUTDOWN prior to calling * this method. * + * This function is thread-safe, terminates quickly and does not block. + * * Returns: 0 on success, -1 on error */ int qio_channel_shutdown(QIOChannel *ioc, From patchwork Tue Sep 1 09:15:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 275006 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D69CC433E2 for ; Tue, 1 Sep 2020 09:44:33 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 297C62083B for ; Tue, 1 Sep 2020 09:44:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="pgSVpdSy" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 297C62083B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:60564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2q8-0001im-2m for qemu-devel@archiver.kernel.org; Tue, 01 Sep 2020 05:44:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34824) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OC-0002so-6a; Tue, 01 Sep 2020 05:15:40 -0400 Received: from mout.web.de ([212.227.17.12]:56797) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OA-0007MC-3q; Tue, 01 Sep 2020 05:15:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951731; bh=UYMICoXZcQUgCRi75B0dKXjg7htZrckMaqi4u2ILlj0=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=pgSVpdSybPci8y23cvGZrr3s6s/1EeVRqSKE+IPMSnT8UGcWox79C7HT3wYpkxjuZ slFZRSqAS77FmSrACLuaT+LcdIOOX3QFVCZV+cRVYOF+wGOrD5ESR68/DJh8oJqzgG E95+LT1nUWnn8pSmI9KbClgPlSRgiR3E2ETrfuk0= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LshWf-1kblAQ0VYn-012Dvs; Tue, 01 Sep 2020 11:15:31 +0200 Date: Tue, 1 Sep 2020 11:15:29 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 7/8] MAINTAINERS: Add myself as maintainer for yank feature Message-ID: <6c7fabd06fd7ba0c6ce405b871f94c7587a50328.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:d/IIh62pio8PHLuKwohc/6MNFq7zoOxJ3Ic5rPw/3wx4zuzTStl nJgNkfWJ6R3ZtVM/mTQ3MmW3Tr2MbfClpcNL5Tw0sqg+465tTJHWSQxa4eIe2c7Fah1Mbs+ ClOgNHyFiauv3xjZuh/o9TAlBvN6O7M79GB8AIm8BGtKjN5LsWAl7/cMIkUfLLO5SNfc2da x/GKuf+/nwKtWTG2QB1GA== X-UI-Out-Filterresults: notjunk:1; V03:K0:5eKK3QK1h04=:dxxo/Ja2qFYIjKdQ+yr5fc 1zX+fJR25hUp5tFXaRI+TgcsG/l7geTdDCDufBoqI7IvpVjAXxJiJGIjnNQ24K2wcmk5HXMPw ZGsuYTbUU+z86W8g5SDM+lyVRFSLR0Y9lihNWrJfcaKMYKkOK81JWszV71/2HEkx6V+VWB0NG X4WYzwEHvfo4jOD0BNAJMN9GgmsI7NFM3wJnRN8DtElThDcPAsGxTetS3jvCsxth5ENPMZoZv gUrLWwNr6WAZsR64G6FwuiZgPqSjXjQsB7YtXB47ClOv2FC4XalnCrSRf4YxHzsGSvfHiyAoO vw09dm9eu0xBNsacEzgNj8EWUQoKzlR7fQlV3l1DH+yMojNTZJRrYsUD2hbn+wqeykqATDyNm 3q3pSh654375bj9BWvox7RoTEW1Ad37EuGN9sIBflV7bssgjQzx1uqG7wThRgQWMoKoXvwxpg nVUBJQKSJd+PJOR3XdmQmOX16MgtNWhSkAllF4WcHaAxwmh6RAmcSiziiShPBVxRGXN9uvmEM Shq2ExVPZHGCBgEQYHq0OrJTR2lxGUBJpS5BeoAmCezMI381J7H+z1nWZM4xOuWWYWR9HDlTH VwJyVPRl1VLiGa3ExVVWFPMFrIgrjuVYP2fFAJFqtqxhfDOwXBtxfrXHJBcaDVRlEwfYZN646 /7TSaxT5s3VW2/88o8x1w8viUK7/+xbPYh/IxwfII5dukbyoJI33zmmE+AJBSq5+UBuACb8KX TEvISWl9A6O8uT/dObr3BSMioIRP1eVRzqrHtvLHJDhbi+5E2pim7+1ZnXz/OYuAKG7Ihc4xR /NkfTTURcdP8CSKqjJI52kVuHpCiwDyxX9fQU4tZlEoIYVV0CwNfqr1TzfXzY3+zAN+eSzZhE 4XtlMKH3v3lT6OyUikuwXodBkdh184HCJ1G4Rd0nHQwjG6sXxceAkOuLFXKniLeg4oUJ6xuRx LCmF0+FLjJGzYl9zgjKvvVS6Y/sE/KEpEaQut53IpHpWGybiUh9UVyydelU8LXfhoB6i2oQ+h PswkcUTmub/whLl2D4jtnfjDsIFLzqyZzC3rmk+7ZNuYmCw0foVCX2wsrKKYU169erod1BAnm mn8OuuTGvaTMWKhm6td4jJ7DtpHCsDi/yxbsrwTRzPGL4UsZ/DwMImKDnRCLhDcPxhpnEY/vZ 85f0CVIQYNk7rCgYtoTC7gi0UvAk/NsoW6v/7D5/1TkfO2zvHoFf9wIBsRau+blSAHzdfETau 67wM+SqpqtyK1ghYKQdlQdysC3kUPtkd6S3wWIw== Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:13 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" I'll maintain this for now as the colo usecase is the first user of this functionality. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrangé --- MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) -- 2.20.1 diff --git a/MAINTAINERS b/MAINTAINERS index 5a22c8be42..c1d450e25a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2615,6 +2615,12 @@ F: util/uuid.c F: include/qemu/uuid.h F: tests/test-uuid.c +Yank feature +M: Lukas Straub +S: Odd fixes +F: util/yank.c +F: include/qemu/yank.h + COLO Framework M: zhanghailiang S: Maintained From patchwork Tue Sep 1 09:15:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 275007 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC4A4C433E6 for ; Tue, 1 Sep 2020 09:42:21 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6FAA22083B for ; Tue, 1 Sep 2020 09:42:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="MxgByNQU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6FAA22083B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:57304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2o0-0000Iy-Bq for qemu-devel@archiver.kernel.org; Tue, 01 Sep 2020 05:42:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34834) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OD-0002tu-Ld; Tue, 01 Sep 2020 05:15:42 -0400 Received: from mout.web.de ([217.72.192.78]:42531) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OB-0007OA-Gw; Tue, 01 Sep 2020 05:15:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951734; bh=5Ru4+rBV+K+onBUzRUv2vnLe/gWCnDAJyTD5IvZPjAI=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=MxgByNQUcLF/Wr4p0DDeQ9tm47isswj+WbNY4oBoSSCwA+k8wMfpn50zSdFkF+oRI CH7lLGHuGuoP2Empeu30ZG5xH8Ph49A4MPs/Oro87kJazqZ2PuQ3ibyQhX/OkLgigp IUdZjcwE9zrV8tNDmlQv99YeVukxhMA2203kXoAk= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LiCx5-1kzJcj2urD-00nNDr; Tue, 01 Sep 2020 11:15:34 +0200 Date: Tue, 1 Sep 2020 11:15:33 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 8/8] tests/test-char.c: Wait for the chardev to connect in char_socket_client_dupid_test Message-ID: <613e42af4f7219cba082acb2533fcdf95fc098cb.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:r9EJSI9MAlnesvO4kWkt1JtcVh32jssS9wMze4dW2So/znYxAqm Fg1WX8Qx2929IjCvQkXx9NKrig6hapiizA0aeIVXrlamiCmAw2W0ZAcLkCpm8edb5CVUOqL /5qaJcH1sCnAwv+4Qz0RSXZFiBh4TwWY10VBUesKLbd5V/EI4/k/QZpU1+gw/MD5gJ3/kG3 mtAClBzTQRZ5uTSZykjwQ== X-UI-Out-Filterresults: notjunk:1; V03:K0:e3PCHK0CH4c=:VubaWAuSmReSSNCqBnmXlw FJl0j2MgvuzViKohQk15M9kxF3BwJ81U5Jeo/yt4yON7le6Q7UnlRI9v+GNIDrdLsw0JxvNDz 14neHPu3Xg6lE80IuGED2xxdLudJg3bJbFktfJCcOn+9Cvonk8jAIuZ1e5M/j075aO4otIutG VkP33xZLKpoXR8c7zdlftyL9HRu7MhxAOjYfGjtLbMln+udyy28Zo3iUc5YQaS6h+vkJ/g/z2 FE7snDPtB9eG0OjWt1oGpeo7qrWQIDAJucs7odj2VobMBkB3hpJuxqMy9uwpt95YGk8/7KG0L 2coJwRWUsM+qCizlIIcY6XRPja0Yvl9t4D1kk/QkDZBbHLUoJdze1ioU3HevefolE3LG5h+GO kKjKuvfNXnZCCZxkhiHiW5mowXKEJB5/3mGxGHzvFOp2zdu3FIrg9YQshE+v0Nms9K0D5N9sJ hkSdcWbtWAzFReKGIAw6umXM73pGO/hZ98F1NEtsOy/U+ssnE/cfZSqFGNu4Scc8eE74DRSao FI5GyWNPvg+GcjrTdUxuXXxTkt3LOYhSV5r9RIZqAoweZw2GzBqvCZEME6RZRrxe8HB1ouL2V z3Qe0gbgG//NENqRCDdoHajjlqBAPECke5am96f5Go0zlnkJWHhy2usFiQoFeesU/zlgp9ANx 06MK+p/b2c1jYXJUCzhTjkv4MZu1Vlu996EgRxqsjOfd5J9lenN/ZpJTuNjLSI4NIpiI6noDt r+3DKn4MKODFS5zB1UlozFrHyi92Y1WktKPcwpPs3V492x3Jl3++i6OixYhYHHaVvRzEYI+2P 5VKm1gX6N5otZufmwkP1ruRZ04ThaWAAxKOWh8ijdgfVO2H2BQQR9obhXrfT7a4xc8dlliO0C WXV0sD5UczBDz4Z6PSdAh7/2+LNq61ahuVdPjCh+AqZhoet2uTmRlDqcQ2BOcx4cT8Ecb4uoJ 74B2l2lofNE/dpJqGNykYMNiwbrmaeKqIt0OusPZ/PjKixDwMO43I/XUV2jtNzhtvrzWHWW3f 5+5uL38rpbSyr9MQsjU7wl8Q6Pv+DPKYw31qv1j3+aBoTd9s4rAN0XnDZprKNkxejrEfCcMt3 RdjCBbprwk/BmBABM5vbqAOL31U5n0+O3dVLIv4y3NaTsT+KDG2+HMGJ0GzNwQZ1xjtoSZlRa uLddVewP90tJ6tLUi9s2KK15um20lm9CNlcz7F9k28CuoajzCo57Ayk36kTOyJGHOrbIxd6uz VZVcTWcCL+xVw0k50FFLhJteYG237X9pLMTootA== Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" A connecting chardev object has an additional reference by the connecting thread, so if the chardev is still connecting by the end of the test, then the chardev object won't be freed. This in turn means that the yank instance won't be unregistered and when running the next test-case yank_register_instance will abort, because the yank instance is already/still registered. Signed-off-by: Lukas Straub Reviewed-by: Daniel P. Berrangé --- tests/test-char.c | 1 + 1 file changed, 1 insertion(+) -- 2.20.1 diff --git a/tests/test-char.c b/tests/test-char.c index d35cc839bc..2ced07de69 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -937,6 +937,7 @@ static void char_socket_client_dupid_test(gconstpointer opaque) g_assert_nonnull(opts); chr1 = qemu_chr_new_from_opts(opts, NULL, &error_abort); g_assert_nonnull(chr1); + qemu_chr_wait_connected(chr1, &error_abort); chr2 = qemu_chr_new_from_opts(opts, NULL, &local_err); g_assert_null(chr2);